openssl部分解读
前言
openssl是个开源的加密库。可以对文件进行加密解密。
小知识
术语:
单词: Encryption 加密 Decryption 解密 ssl 安全socket层
tsl 最新协议版本3.1兼容ssl3.0 ,可以自动切换
加密解密:
小孩加密方式,只能防小孩,对专业人士无效。专业加密方式比如openssl,可防止政府这类机构解密
加密解密主要应用于战争。现在用于电子商务等。
对称加密解密过程
对称加密是用同一把钥匙进行加解密,他们的过程如下
明文 ---》加密 ---》密文 ---》解密 ---》 明文
#加密
openssl enc -ciphername -k password -in file -out file
-ciphername 加密算法名称 -in 需要加密的文件 -out输出的加密文件
#解密
openssl enc -ciphername -k password -d -in file -out file
-ciphername 加密算法名称 -in 需要解密的文件 -out输出的解密文件 #加密算法有这些ciphers:base64,des,des3,rc2,rc5,aes256
#那种方法加密算法,就用那种加密算法解密
优点:对称加密速度快 缺点:密钥传递困难。
非对称加密
生成一对钥匙对。一个是公钥一个是私钥。公钥加密,只能通过私钥解密,私钥加密,只能通过公钥解密。优点传输方便,缺点 加密速度慢
非对称加密的算法有rsa算法,非对称加密的key很长,比如1024位,难于记忆,通常把key保存为文件。具体过程如下
openssl genrsa -out file #产生1024位私钥文件
openssl rsa -in file -pubout >pub.key
#生成公钥文件,私钥生成公钥,重定向pub.key
#-pubout 输出屏幕 加解密例子:
#公钥加密
openssl rsautl -in file -out file -inkey file -pubin -encrypt
#-pubin 表明公钥文件 -encrypt 加密
#私钥解密
openssl rsautl -in file -out file -inkey file -decrypt
混合使用
由于对称和非对称的优缺点得知,用非对称加密数据耗时太长,不利于大数据传输,对称加密速度很对,但密钥传递困难,就有了混合模式,见下图:
此图过程翻译如下:
明文加密前,生成个随机的session key用来对称加密,session key把明文加密,公钥再把session key加密 ,打包两者发送给server端。
解密过程:
解包,私钥解密session key的加密,拿到解密的seesion key 再解密明文加密的数据.
数字签名
数字签名就是私钥加密,公钥解密。比如签订合同,商家手里是公钥,我是私钥,我用私钥签订了合同,商家如何证明是我签的呢?拿公钥能打开,就证明是我签的名
#私钥签名
openssl rsautl -in test.txt -out test.sig -inkey prv.key -sign
-sign私钥签名 #公钥解密
openssl rsautl -in test.sig -out test.txt -inkey pub.key -pubin -verify
哈希函数
常用的md5函数或sha1函数,生成的字节码分别是128/160位。
#文件摘要的特征码
openssl dgst -md5 file
md5sum file
openssl dgst -sha1 file
sha1sum file
上一节我们知道,混合使用的方法,让两者加密技术羊长避短,思考下,如何证明公钥就是那个人的呢?
证书
ca证书是一个第三方机构,大家相信他。一个证书包含三个,第一个公钥,第二个DN,一些注册信息,第三个证书机构的私钥签名,签名的是什么?对公钥和DN这个文件进行hash,在用私钥对起加密。
ssl
安全socket层,也就是现在用的https,它位于传输层之上,应用层之下,因为它不修改TCP协议,所以被大家所接受,修改TCP协议的ssl都死掉了。
ssl的应用:
现在的HTTP的服务端软件流行的有apache和nginx,具体如何把证书嵌套在应用里,大家具体百度下。
证书可以生成两种,一种是基于服务端自签名的证书,另一种是基于客户端和服务端都需要认证的证书。用的最多的也是第一种,第二种百度下就能找到,这里不提
参数解释:
-x509 国际标准格式
-keyout 私钥文件
-out server.crt 数字证书
-subj "/CN=TEST-ONLY ..."
生成证书:
openssl req -new -x509 -days \
-keyout server.key -out server.crt \
-subj "/CN=TEST-ONLY ..."
总结:
本知识来源于小布老师的openssl讲解,详细可以参考播布客搜小布老师的ssl教程。
openssl部分解读的更多相关文章
- 令人作呕的OpenSSL
在OpenSSL心脏出血之后,我相信非常多人都出了血,而且流了泪...网上瞬间出现了大量吐嘈OpenSSL的文章或段子,仿佛内心的窝火一瞬间被释放了出来,跟着这场疯闹,我也吐一下嘈,以雪这些年被Ope ...
- 讨厌OpenSSL
在OpenSSL心脏出血后,.我相信很多人都出了血.而流下眼泪...瞬间出现在网上了很多吐槽OpenSSL文章还是那条,窝火一刻仿佛心脏被释放出来,按照这个忙疯了,我吐在嘈杂.在这些年被雪OpenSS ...
- 解读Scrapy框架
Scrapy框架基础:Twsited Scrapy内部基于事件循环的机制实现爬虫的并发.原来: url_list = ['http://www.baidu.com','http://www.baidu ...
- 如何使用OpenSSL工具生成根证书与应用证书
如何使用OpenSSL工具生成根证书与应用证书 一.步骤简记 // 生成顶级CA的公钥证书和私钥文件,有效期10年(RSA 1024bits,默认) openssl req -new -x509 -d ...
- 使用OpenSSL工具制作X.509证书的方法及其注意事项总结
版权声明:本文为博主原创文章.转载请注明出处. https://blog.csdn.net/Ping_Fani07/article/details/21622545 怎样使用OpenSSL工具生成根证 ...
- 源代码方式向openssl中加入新算法完整具体步骤(演示样例:摘要算法SM3)【非engine方式】
openssl简单介绍 openssl是一个功能丰富且自包括的开源安全工具箱.它提供的主要功能有:SSL协议实现(包括SSLv2.SSLv3和TLSv1).大量软算法(对称/非对称/摘要).大数运算. ...
- 密码学系列之:使用openssl检测网站是否支持ocsp
目录 简介 支持OCSP stapling的网站 获取服务器的证书 获取OCSP responder地址 发送OCSP请求 一个更加简单的方法 总结 简介 OCSP在线证书状态协议是为了替换CRL而提 ...
- 创建私有CA,我就用openSSL
目录 简介 搭建root CA 生成root CA 使用CRL 使用OSCP 总结 简介 一般情况下我们使用的证书都是由第三方权威机构来颁发的,如果我们有一个新的https网站,我们需要申请一个世界范 ...
- SDWebImage源码解读之SDWebImageDownloaderOperation
第七篇 前言 本篇文章主要讲解下载操作的相关知识,SDWebImageDownloaderOperation的主要任务是把一张图片从服务器下载到内存中.下载数据并不难,如何对下载这一系列的任务进行设计 ...
随机推荐
- java ArrayList的几种方法使用
package java06; import java.util.ArrayList; /* ArrayList的常用的几个方法: public boolean add(E e) : 向集合汇总添加元 ...
- MySQL执行外部sql脚本文件命令报错:unknown command '\'
由于编码不一致导致的 虽然大部分导出是没有问题的 但是数据表中存储包含一些脚本(富文本内容)会出现该问题,强制指定编码即可解决. mysql导入时指定编码: mysql -u root -p --de ...
- bzoj3717 [PA2014]Pakowanie 贪心+状压DP
题目传送门 https://lydsy.com/JudgeOnline/problem.php?id=3717 题解 这道题大概也就只能算常规的状压 DP 吧,但是这个状态和转移的设计还是不是很好想. ...
- 接口参数校验之@Valid与BindingResult
接口方法往往需要对入参做一些校验,从而判断入参是否合格,而javax.validation包为我们提供了一些常用的参数校验注解,使用起来很方便. 下面这个示例是检验入参对象中的password是否为空 ...
- 基于oracle 的PL/SQL编程 -变量使用
1. 需要开启的服务: 本机安装的oracle ,默认是开机启动服务的,开机时间太慢,关闭了,需要手动打开: OracleDBConsoleorcl OracleOraDb10g_home1iSQL ...
- 4412 make menuconfig和make
一.Menuconfig的操作 • Linux编译器通过.config文件确认哪些代码编译进内核,哪些被裁减掉• menuconfig是生成.config的一个工具• 在Linux发展过程中,配置内核 ...
- Android实战技巧:Dialog (转)
转:http://blog.csdn.net/hitlion2008/article/details/7567549#t0 Dialog是任何系统都必须有的一个控件,作为辅助窗口,用于显示一些消息,或 ...
- 103、Linux 编译 Kaldi 语音识别工具
由于这个开源的语音识别工具Kaldi只能在Linux下面成功编译, 所以这一小节来写如何成功地在Linux下面编译Kaldi工具 (1)第一步,去github 上面把 Kaldi下载下来 git cl ...
- Flask学习之旅--分页功能:分别使用 flask--pagination 和分页插件 layPage
一.前言 现在开发一个网站,分页是一个很常见的功能了,尤其是当数据达到一定量的时候,如果都显示在页面上,会造成页面过长而影响用户体验,除此之外,还可能出现加载过慢等问题.因此,分页就很有必要了. 分页 ...
- 测开之路三十一:Flask基础之请求与相应
from flask import requestrequest.pathrequest.methodrequest.formrequest.argsrequest.values 一般用form获取p ...