- 下图为TLS协议流程图:
阶段一
- 客户端和服务端发送Hello报文建立初次连接。
客户端向服务端发起Client Hello报文,报文内容包含密码套件以及随机数。
密码套件:
此处客户端支持的密码套件为ECC-SM4-CBC-SM3。(此处客户端仅支持1个密码套件)
随机数:
此处随机数为:886cdd617dea44a6588d25f765f87292cb6d55c2103826a56deb73783bc934d5。暂且称为随机数1。
阶段二
客户端向服务端发起Server Hello报文,报文内容包含选择使用的密码套件以及随机数。
密码套件:
此处可观察出客户端选择的密码套件为ECC-SM4-CBC-SM3。
随机数:2411e2671841bb1ad7ed7bbd9802e53073cd677ce900aac9e85617244dd7402a,暂且称为随机数2。
阶段三
- 此处为客户端产生随机数:30819a022100bd593cdbca96c44cb9a483844d2ca98825548a84bd0d5e7fea0a586f0ac98736022100cc03783703ab4b8412c649fa77b07abb288a6bd70b05cb90fb2a6f656986b8b0042067106bff4ec568198432452ffe4b94e5334317b642a28f6e9e14408d3bd3423f043094c34681ae959ae428b7ff4671109ea5c2f9e8c1215fafa98e07ef62168a77d5cf84932ed65915d79a9e33ca6ebe5806。
可称为预主密钥,暂且称为随机数3。
客户端产生随机数3后,采用阶段二获得的客户端证书内的公钥对随机数3加密后发送到服务端。
服务端用自己的私钥解密,得到随机数3。
此时客户端和服务端分别持有随机数1、随机数2、随机数3。
随后客户端和服务端用同样的算法和三个随机数作为参数生成同一个会话密钥。
阶段四
Change Cipher Spec,Encrypted Handshake Message,说明密钥交换完成,之后的数据通过此会话密钥实现加密保护。