https握手的过程
基于Wireshark抓包获取数据。
1)Client Hello 客户端向服务端发送数据,包含客户端支持SSL协议的版本号、随机数、加密算法,压缩算法列表等
版本 | 随机数(Random1) | 会话ID | 加密算法列表 | 压缩方法列表 |
主、从 | 时间、随机字节 | 长度、ID | 长度、套件列表 | 长度、列表 |
2)Server Hello 服务端向客户端发送数据,包含确定选择的加密套件、随机数等
版本 | 随机数(Random2) | 会话ID | 选定的加密套件 | 选定的压缩方法 |
主、从 | 时间、随机字节 | 长度、ID |
此时客户端和服务端都拥有了两个随机数(Random1 、Random2)
3)服务端向客户端发送certificate信息(完整的证书链信息)、Server Key Exchange(包含密钥交换算法所需要的额外参数)、Certificate Request(服务端要求客户端上报证书,可选)
4)Server Hello Done 通知客户端Server Hello过程结束
5)Certificate Verify 客户端接收到服务端传来的证书后,从CA验证该证书的合法性。验证通过后取出证书中的服务端公钥,再生成一个随机数Random3,再用服务端公钥非对称加密Random3生成PreMaster Key。
Client Key Exchange 将上面客户端产生的PreMaster Key 传给服务端,服务端再用自己的私钥解出这个PreMaster Key 得到客户端生成的Random3。这样服务端和客户端都拥有了Random1、Random2、Random3.
参考:
https://blog.csdn.net/weiyuefei/article/details/72547090
https://www.jianshu.com/p/7158568e4867