Q
代表question
问题,BS
代表brainstorm
头脑风暴wireshark
HTTP 协议中的内容都是明文传输,HTTPS 的目的是将这些内容加密,确保信息传输安全。最后一个字母 S 指的是 SSL/TLS 协议,它位于 HTTP 协议与 TCP/IP 协议中间。
使用一把只有通信双方知道的密钥对信息进行加密传输。
服务器
生成一对 公钥私钥(非对称加密)客户端
从服务器那获取公钥客户端
生成一个密钥(对称加密)使用获取的公钥加密该密钥客户端
将加密后的密钥发送给服务器服务器
用自己的私钥解密 获得该密钥服务器
向权威机构注册证书,证书中存储了用权威机构私钥加密的公钥服务器
将证书发给客户端,客户端 用权威机构的公钥解密,获取服务器的公钥客户端
生成一个密钥(对称加密)使用获取的公钥加密该密钥客户端
将加密后的密钥发送给服务器服务器
用自己的私钥解密 获得该密钥权威机构会 先对服务器公钥进行摘要,再用私钥加密生成签名。
curl https://www.taobao.com
capture1
capture2
client | server |
---|---|
你好 | |
你好 | |
这是我的证书,里面有我的公钥 | |
得到了你的公钥 | |
准备加密 | |
生成密文 | |
准备加密,生成密文 | |
... | |
... | |
结束 | |
结束 |
Client hello
消息到服务器端,消息中同时包含了它的 Transport Layer Security (TLS) 版本,可用的加密算法和压缩算法。Server hello
消息,消息中包含了服务器端的TLS版本,服务器选择了哪个加密和压缩算法,以及服务器的公开证书,证书中包含了公钥。客户端会使用这个公钥加密接下来的握手过程,直到协商生成一个新的对称密钥Finished
消息给服务器端,使用对称密钥加密这次通讯的一个散列值Finished
消息,也使用协商好的对称密钥加密certificate
浏览器在与服务器完成 TLS 握手前,就开始发送请求数据,服务器在收到这些数据后,完成 TLS 握手的同时,开始发送响应数据。
TLS False Start
如果用户的一个业务请求包含了多条的加密流,客户端与服务器将会反复握手,必定会导致更多的时间损耗。或者某些特殊情况导致了对话突然中断,双方就需要重新握手,增加了用户访问时间。
(1)服务器为每一次的会话都生成并记录一个 ID 号,然后发送给客户端;
(2)如果客户端发起重新连接,则只要向服务器发送该 ID 号;
(3)服务器收到客户端发来的 ID 号,然后查找自己的会话记录,匹配 ID 之后,双方就可以重新使用之前的对称加密秘钥进行数据加密传输,而不必重新生成,减少交互时间。
session
服务端主动获取 OCSP 查询结果并随着证书一起发送给客户端,从而客户端可直接通过 Web Server 验证证书,提高 TLS 握手效率。
服务器模拟浏览器向 CA 发起请求,并将带有 CA 机构签名的 OCSP 响应保存到本地,然后在与客户端握手阶段,将 OCSP 响应下发给浏览器,省去浏览器的在线验证过程。由于浏览器不需要直接向 CA 站点查询证书状态,这个功能对访问速度的提升非常明显。
[1]
图文详解:Wireshark 抓包深刻学习 HTTPS 工作原理: https://raw.githubusercontent.com/ljun20160606/blog/master/directory/https.md