HTTPS的算法之TLS和SSL基本原理说明和讲解
TLS/SSL协议背后的算法
TLS/SSL的关键步骤
1、认证
2、密钥协商
3、数据加密
客户端服务端在连接阶段需要协商出双方都认可的密码套件。密码套件决定了本次连接使用哪一种加密算法、密钥协商算法、HMAC算法
数据加密
非对称加密算法一般比较慢,大部分web应用很少使用非对称加密算法进行加解密运算
唯一可行的方案是采用对称加密算法来对数据进行加密传输,一般是AES、EDS算法
有加密算法的地方必有MAC算法
MAC算法和HASH算法不一样,HASH算法仅能消息完整,不能确保没有被篡改
而MAC算法在生成摘要的时候,使用了双方协商一致的密钥,所以在中间人不知道密钥的前提下,是没有办法生产相同的摘要的
MAC值 = mac(消息, 密钥)
客户端和服务端必须持有相同的AES密钥、HAMC密钥、初始化向量,这些关键值称为密钥块,密钥块是动态生成的,在传输过程中必须是保密的,只有通信双方的客户端和服务端才能知晓,不能泄露
密钥协商
数据传输需要加密,加密数据需要密钥,如何安全传输这些密钥?这时候密钥协商算法就可以出场了。
使用何种密钥协商算法也是由密码套件决定的,不管采用哪种密钥协商算法,客户端和服务端最终都会协商出预备主密钥,预备主密钥转换成主密钥,主密钥最终再转换成密钥块
在HTTPS中,一般采用RSA或者DH算法来协商预预备主密钥
RSA
RSA密钥协商使用非对称加密
DH算法
DH算法在进行密钥协商时,通信双方任何一方无法独自计算出一个会话密钥。
简单概括就是,服务端互相交换DH公钥,使用对方公钥与自身私钥计算出相同的预备主密钥。能计算出相同的预备主密钥的原因是两边DH公私钥由相同DH参数生成
认证 PKI
通过RSA或DH密钥协商算法,服务器需要提供一对密钥。如果有中间人将服务端传递给客户端的公钥替换,这样协商算法协商出来的密钥块可以被中间人解密出明文数据。
本质原因是客户端无法确认服务端的真实身份,客户端访问example.com,接收到一个服务端公钥,但无法确认公钥是不是属于example.com。公钥只是一串数字,需要一种手段来认证公钥真正的主人,解决方案就是PKI
证书类型
x509的证书编码格式有两种
1.PEM(Privacy-enhanced Electronic Mail) 是明文格式的 以 -----BEGIN CERTIFICATE-----开头,已-----END CERTIFICATE-----结尾,中间是经过base64编码的内容,apache需要的证书就是这类编码的证书
查看这类证书的信息的命令为 :openssl x509 -noout -text -in server.pem
其实PEM就是把DER的内容进行了一次base64编码
2.DER 是二进制格式的证书
查看这类证书的信息的命令为 :
openssl x509 -noout -text -inform der -in server.der
使用openssl试验
模拟一个证书机构
为该证书机构创建私钥和自签名的根证书
openssl req -x509 -newkey rsa:2048 -nodes -days 365 -keyout rootCA.key -out rootCA.crt
- -x509 表示我们要对证书进行自签名
- -newkey 表示我们要为证书创建一个新的私钥,采用2048bit的秘钥长度(也可以指定已有的私钥)
- -nodes 表示不要使用des对证书进行加密
会生成机构的私钥和根证书。注意证书里是包含公钥的,所以只需要证书和私钥即可
# -rw-r--r-- 1 wentao wheel 1.2K Sep 25 19:51 rootCA.crt
# -rw-r--r-- 1 wentao wheel 1.7K Sep 25 19:51 rootCA.key
.crt 证书文件 ,可以是DER(二进制)编码的,也可以是PEM( ASCII (Base64) )编码的 ,在类unix系统中比较常见
.cer 也是证书 常见于Windows系统 编码类型同样可以是DER或者PEM的,windows 下有工具可以转换crt到cer
.key 一般公钥或者密钥都会用这种扩展名,可以是DER编码的或者是PEM编码的
查看DER编码的(公钥或者密钥)的文件的命令为 openssl rsa -inform DER -noout -text -in xxx.key
查看PEM编码的(公钥或者密钥)的文件的命令为 openssl rsa -inform PEM -noout -text -in xxx.key
证书机构为example.com颁发证书
创建私钥和CSR(证书签名请求)
openssl req -new -nodes -keyout exmaple_com.key -out example_com.csr
# -rw-r--r-- 1 wentao wheel 1.0K Sep 25 20:12 example_com.csr
# -rw-r--r-- 1 wentao wheel 1.7K Sep 25 20:12 exmaple_com.key
使用证书机构的私钥、根证书和example.com的CSR创建数字证书
$ openssl x509 -req -in example_com.csr -CA rootCA.crt -CAkey rootCA.key -CAcreateserial -out example_com.crt
Signature ok
subject=/C=CN/ST=BeiJing/L=BeiJing/O=NNSDAO/CN=www.example.com/emailAddress=liang.w.t@foxmail.com
Getting CA Private Key
# -rw-r--r-- 1 wentao wheel 1.2K Sep 25 20:16 example_com.crt
# -rw-r--r-- 1 wentao wheel 1.0K Sep 25 20:12 example_com.csr
# -rw-r--r-- 1 wentao wheel 1.7K Sep 25 20:12 exmaple_com.key
这篇好文章是转载于:学新通技术网
- 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
- 本站站名: 学新通技术网
- 本文地址: /boutique/detail/tanefif
-
photoshop保存的图片太大微信发不了怎么办
PHP中文网 06-15 -
Android 11 保存文件到外部存储,并分享文件
Luke 10-12 -
word里面弄一个表格后上面的标题会跑到下面怎么办
PHP中文网 06-20 -
《学习通》视频自动暂停处理方法
HelloWorld317 07-05 -
微信公众号没有声音提示怎么办
PHP中文网 03-31 -
photoshop扩展功能面板显示灰色怎么办
PHP中文网 06-14 -
excel下划线不显示怎么办
PHP中文网 06-23 -
excel打印预览压线压字怎么办
PHP中文网 06-22 -
怎样阻止微信小程序自动打开
PHP中文网 06-13 -
photoshop蒙版画笔没反应怎么办
PHP中文网 06-24