HTTPS建立的过程
SSL/TLS协商基本流程
- 客户端向服务器索要并验证服务器公钥
- 双方协商产生「对话秘钥」
- 双方使用「会话秘钥」进行加密通信
前面两步是SSL/TLS的建立过程,也就是TLS握手阶段,SSL/TLS「握手阶段」设计的四次通信,如下图所示:
SSL/TLS协议建立的详细流程:
Client Hello
首先,客户端向服务器发起加密通信的请求,也就是Client Hello请求。
这一步,客户端向服务器发送如下信息:
- 客户端支持的TLS版本,如TLS1.2版本。
- 客户端产生的随机数(Client Random),后面用于生成「会话秘钥」条件之一。
- 客户端支持的加密套件列表。
Server Hello
服务器收到客户端请求后,向客户端发出响应,也就是
Server Hello
,服务器回应内容如下:- 确认SSL/TLS协议版本,如果浏览器不支持,则关闭加密协议
- 服务器产生随机数(Server Random),用于后面生成「会话秘钥」的条件之一
- 确认加密套件列表
- 服务器的数字证书
客户端回应
客户端收到服务器的回应之后,首先通过浏览器或操作系统中的CA公钥,确认服务器证书的真实性。
若证书没有问题,客户端会从数字证书中取出服务器的公钥,然后使用它加密报文,向服务器发送如下信息:
- 一个随机数(pre-master key),该随机数使用服务器公钥加密。
- 加密通信算法改变通知,表示之后的信息都使用会话秘钥进行加密通信。
- 客户端握手结束通知,表示客户端的握手阶段已经结束。这一项同时把之前所有发送的数据做一个摘要,用来给服务器校验。
服务端和客户端共有了三个随机数(Client Random、Server Random、pre-master key),接着就用双方协商的加密算法,各自生成本次通信的会话秘钥。
服务器的回应
服务器收到客户端的第三个随机数(per-master key)之后,通过协商的加密算法,计算本次通信的「会话秘钥」。
然后向客户端发送最后的信息:
- 加密通信算法改变的通知,表示之后的信息都会使用「会话秘钥」加密通信。
- 服务器握手结束通知,表示服务器的握手阶段已经结束。这一项同时把之前所有发送的内容做一个摘要,供客户端校验。
至此,整个SSL/TLS握手的阶段全部结束,接下来客户端和服务器进入加密通信,任然使用HTTP协议,但是内容会使用「会话秘钥」进行加密。
补充一个数字证书签发和验证的流程: