Https加密流程以及原理(通俗易通并附图)
1.定义
-
HTTP over SSL 的简称,即工作在 SSL(安全套接字层) 或TLS(SSL的升级版)上的 HTTP。说白了就是加密通信的HTTP。
-
一定注意HTTPS不是协议。
2.工作原理
-
在客户端和服务器之间协商出一套对称**,每次发送信息之前将内容加密,收到之后解密,达到内容的加密传输。
加密解密数据用的对称加密,传输Pre master sercert和证书验证使用的非对称加密。
为什么不直接使用非对称加密?
-
非对称加密由于使用了复杂的数学原理,因此计算相当复杂,如果完全使用非对称加密来加密通信内容,会严重影响网络通信的性能。
3.Https建立过程
Step 1. Client Hello
C端通知S端建立连接 同时会带上客户端支持的:
-
对称加密算法
-
非对称加密算法
-
Hash算法
-
SSL或者TLS版本号
-
一个随机数
Step 2.Server Hello
S端通知C端建立连接 并带上Server端选择的:
-
对称加密算法
-
非对称加密算法
-
Hash算法
-
SSL或者TLS版本号
-
一个随机数
那么此时客户端和服务端就拥有了相同的
-
对称加密算法
-
非对称加密算法
-
Hash算法
-
SSL或者TLS版本号
-
两个随机数
Step 3.S端发给客户端被第三方机构信任的一个证书公钥,客户端收到证书公钥后对证书进行验证。
看图:
如图发来的信息主体是证书的公钥,但是它同时会附加上证书的签名和HOST主机名称。
-
首先我们通过发来证书的根证书在本地找寻相同的根证书(本地根证书一般是操作系统自身已经带着的)。
-
取出根证书的公钥对证书的签名(用证书私钥对发来公钥进行加密的一个Hash值)做认证(公钥解密)。
-
比对验证后的数据(Hash)和发来证书公钥的Hash值是否相同,如果相同则认证通过,说明是一个受信任的证书。
Step 4.生成Pre Master-sercert(一个随机数),并用发来的证书公钥加密传给Server端。
Step 5.C端和S端用Pre Master-sercert 和1,2部的两个随机数生成Master-sercert。
Step 6.C端和S端用相同的Master-sercert和相同的对称加密算法生成秘钥和sercert key(用于做Hash摘要),这时因为生成对称加***的条件两方相同,所以最后生成的秘钥虽然没有通过传输,两方也是相同的(避免了对称加密过程中的秘钥泄露问题)。
Step 7.开始加密数据 C端加密数据发给S端同时会带上用sercert key为介质做的Hash值(为了防止数据被篡改)。
Step 8.S端解密数据后用sercert key对数据做Hash并同发送来的Hash作对比,如果相同则通过验证。
4.HTTPS 连接建立的过程 简要
-
Client Hello
-
Server Hello
-
服务器证书 信任建立
-
Pre-master Secret
-
客户端通知:将使用加密通信
-
客户端发送:Finished
-
服务器通知:将使用加密通信
-
服务器发送:Finished
5.抓包软件可以抓到加密信息的原理
Fiddler为什么可以抓取到信息?
因为它要求你手动信任了它的根证书。此时它就可以篡改证书为它自己的证书了,HOST NAME直接篡改为目标服务器不变,证书公钥是它自身的假机构签发的而你本地又信任了它的根证书,那么此时证书的验证是可以通过的,后续的Pre Master-Sercert它也可以获取到了,那么最后它是持有**的。
Fiddler相当于当了中间人,客户端服务端两头骗,所以我们平时不要信任未知的证书。