HTTPS建立的过程

SSL/TLS协商基本流程

  1. 客户端向服务器索要并验证服务器公钥
  2. 双方协商产生「对话秘钥」
  3. 双方使用「会话秘钥」进行加密通信

前面两步是SSL/TLS的建立过程,也就是TLS握手阶段,SSL/TLS「握手阶段」设计的四次通信,如下图所示:

HTTPS 连接建立过程

SSL/TLS协议建立的详细流程:

  1. Client Hello

    首先,客户端向服务器发起加密通信的请求,也就是Client Hello请求。

    这一步,客户端向服务器发送如下信息:

    • 客户端支持的TLS版本,如TLS1.2版本。
    • 客户端产生的随机数(Client Random),后面用于生成「会话秘钥」条件之一。
    • 客户端支持的加密套件列表。
  2. Server Hello

    服务器收到客户端请求后,向客户端发出响应,也就是Server Hello,服务器回应内容如下:

    • 确认SSL/TLS协议版本,如果浏览器不支持,则关闭加密协议
    • 服务器产生随机数(Server Random),用于后面生成「会话秘钥」的条件之一
    • 确认加密套件列表
    • 服务器的数字证书
  3. 客户端回应

    客户端收到服务器的回应之后,首先通过浏览器或操作系统中的CA公钥,确认服务器证书的真实性。

    若证书没有问题,客户端会从数字证书中取出服务器的公钥,然后使用它加密报文,向服务器发送如下信息:

    • 一个随机数(pre-master key),该随机数使用服务器公钥加密。
    • 加密通信算法改变通知,表示之后的信息都使用会话秘钥进行加密通信。
    • 客户端握手结束通知,表示客户端的握手阶段已经结束。这一项同时把之前所有发送的数据做一个摘要,用来给服务器校验。

    服务端和客户端共有了三个随机数(Client Random、Server Random、pre-master key),接着就用双方协商的加密算法,各自生成本次通信的会话秘钥。

  4. 服务器的回应

    服务器收到客户端的第三个随机数(per-master key)之后,通过协商的加密算法,计算本次通信的「会话秘钥」。

    然后向客户端发送最后的信息:

    • 加密通信算法改变的通知,表示之后的信息都会使用「会话秘钥」加密通信。
    • 服务器握手结束通知,表示服务器的握手阶段已经结束。这一项同时把之前所有发送的内容做一个摘要,供客户端校验。

    至此,整个SSL/TLS握手的阶段全部结束,接下来客户端和服务器进入加密通信,任然使用HTTP协议,但是内容会使用「会话秘钥」进行加密。

补充一个数字证书签发和验证的流程:

img

参考

小林coding-HTTPS 是如何建立连接的?其间交互了什么?