客户端发出请求(Client Hello)
浏览器支持的SSL/TLS协议版本,比如TLS 1.0版。【version】
一个浏览器客户端生成的随机数,稍后用于生成对称加密算法的"对话密钥"。【<font color="#f15a23">Random1</font>】
浏览器支持的压缩方法。【comp_methods】
session-id:用来表明一次会话,第一次建立没有。如果以前建立过,可以直接带过去。
扩展字段:比如密码交换算法的参数、请求主机的名字等等
浏览器支持的各种加密方法,对称的,非对称的,HASH算法。比如RSA非对称加密算法,DES对称加密算法,SHA-1 hash算法。【ciphersuites】
服务器回应
Sever Hello
确认使用的加密通信协议版本,比如TLS 1.0版本。如果浏览器与服务器支持的版本不一致,服务器关闭加密通信。
一个服务器生成的随机数,稍后用于生成对称加密算法的"对话密钥"。【<font color="#f15a23">Random2</font>】
确认使用的各种加密方法,比如确认算法使用:RSA非对称加密算法,DES对称加密算法,SHA-1 hash算法
<font color="#16884a">Certificate</font>
这里主要就是把证书发送给Client,客户端拿到证书后就可以进行验证,同时获取到公钥,用于后面Random3的加密。
Server Key Exchange
这个消息是用来发送密钥交换算法相关参数和数据的,根据密钥交换算法的不同,传递的参数也是不同的。<br>
常用的密钥交换算法:RSA、DH(Diffie-Hellman)、ECDH(Ellipticcurve Diffie–Hellman)。
ServerHello Done
Server来表示自己说完了
客户端回应
Client Key Exchange
这里客户端会再生成一个随机数【<font color="#f15a23">Random3</font>】
然后使用服务端传来的公钥进行加密得到密文PreMaster Key
服务端收到这个值后,使用私钥进行解密,得到Random3
这样客户端和服务端就都拥有了Random1、Random2和Random3。这样两边的秘钥就协商好了。<br>后面数据传输就可以用协商好的秘钥进行加密和解密。<br>
Change Cipher Spec
一条事件消息。
这一步是客户端通知服务端后面再发送的消息都会使用前面协商出来的秘钥加密了
Encrypted Handshake Message
这一步对应的是 Client Finish 消息,客户端将前面的握手消息生成摘要再用协商好的秘钥加密,这是客户端发出的第一条加密消息。<br>服务端接收后会用秘钥解密,能解出来说明前面协商出来的秘钥是一致的。
服务器响应
New Session Ticket
Change Cipher Spec
这一步是服务端通知客户端后面再发送的消息都会使用加密。
是一条事件消息。
Encrypted Handshake Message
这一步对应的是 Server Finish 消息,服务端也会将握手过程的消息生成摘要再用秘钥加密,这是服务端发出的第一条加密消息。<br>客户端接收后会用秘钥解密,能解出来说明协商的秘钥是一致的。