连接建立过程
基本流程如下:
- 客户端向服务器索要并验证服务器的公钥
- 双方协商产生对称密钥
- 双方采用对称密钥进行加密通信
TLS 的握手阶段涉及四次通信,使用不同的密钥交换算法,流程也会有所不同。下面以 RSA 密钥交换算法为例,介绍 HTTPS 连接建立过程。
Client Hello
客户端向服务器发送一个 Client Hello 消息,包含以下信息:
- 客户端支持的 TLS 版本
- 客户端生成的一个随机数(Client Random)
- 客户端支持的加密算法,如 RSA、DH、ECDH 等
Server Hello
服务器收到 Client Hello 消息后,向客户端发送一个 Server Hello 消息,包含以下信息:
- 服务器选择的 TLS 版本
- 服务器生成的一个随机数(Server Random)
- 服务器选择的加密算法
- 服务器的数字证书
客户端回应
客户端收到 Server Hello 消息后,会执行以下操作:
- 通过浏览器或者 OS 中的 CA 公钥验证服务器的数字证书
- 从服务器的数字证书中提取公钥,用于后续的通信
- 生成一个随机数(Pre-Master Secret),并使用服务器的公钥加密该随机数
- 向服务器发送消息,包含以下信息
- 加密后的 Pre-Master Secret
- 加密算法改变通知,表示后续的通信将使用对称密钥加密
- 客户端的 Finished 消息,包含一个验证数据,用于验证双方是否使用相同的密钥
服务器回应
服务器收到客户端的 Pre-Master Secret 后,会执行以下操作:
- 使用私钥解密 Pre-Master Secret
- 使用 Client Random、Server Random 和 Pre-Master Secret 生成对称密钥(Master Secret)
- 向客户端发送消息,包含以下信息
- 加密算法改变通知,表示后续的通信将使用对称密钥加密
- 服务器的 Finished 消息,包含一个验证数据,用于验证双方是否使用相同的密钥