https的知识整理

https

Posted by bbkgl on July 5, 2020

荷风送香气

竹露滴清响

看了最近大家的面经,感觉现在https已经成了必问的一部分了。

当然现在因为要睡觉了,我还是只简单过一下内容。

请求流程

为了快速清楚描述流程,先用一张图:

简单来说,原来的TCP其实是3次握手,实际在3次握手成功以后,还需要进行一次握手,就是在使用非对称加密的情况下,如何让客户端如何获得公钥,且能够让客户端判断出服务器是真实的还是黑客。

流程简化如下:

  1. Client-hello阶段:浏览器中完成地址输入后,解析域名获得 IP Host 地址, 浏览器会与此 Host 的443(默认, 如果指定其他端口则会连接此端口) 尝试连接,也就是 TLS 握手协议的 Client-hello,上图的第一步。浏览器会将”支持的加密组件”/”尝试连接到Host头”等信息发送给服务器,并会附上一份随机生成的 session ticket1.

  2. Server-hello阶段:服务器收到浏览器发送来的 TLS 握手请求后, 存储浏览器发送的session ticket2, 然后根据发送来的 host 寻找对于的服务器证书, 然后会将服务器证书, 服务器与浏览器妥协(均支持)的加密套件方法, 和一份随机生成的 session ticket 返回给浏览器.
  3. Cipher-spec阶段:浏览器收到证书后,验证其有效性(后面再补充验证内容)。如果检查通过,则生成session ticket 3 (这是浏览器生成的第二份 ticket), 通过返回证书中的公钥,用协商的”秘钥交换算法”加密,返回给服务器。同时浏览器用 session ticket 1(浏) & session ticket 2(服) & session ticket 3(浏) 组合成 session key。服务器收到 Ciper-spec 后,用配置的私钥,解密出 session ticket3,用 session ticket 1(浏) & session ticket 2(服) & session ticket 3(浏) 组合成 session key。

后面就不再使用非对称加密的公钥和私钥进行数据传输,而是使用session key进行对称加密解密。