基于TASSL双向认证握手协议

说明

C->S表示报文从client端发送到server端
S->C表示报文从server端发送到client端。
采用国密版本wirshark进行抓包操作。

1 client hello (C->S)

charles验证双向认证 双向验证抓包_ssl


客户端发起握手协商操作,它将发送一个 Client Hello 消息给服务器,消息中明确了其所支持的SSL/TLS版本、Cipher suite加密算法组合等,可以让服务器选择,并提供了一个客户端随机数,用于以后生成会话密钥使用。

2 server hello (S->C)

charles验证双向认证 双向验证抓包_客户端_02


服务器将返回一个 Server Hello 消息,该消息包含了服务器选择的协议版本、加密算法,以及服务器随机数、会话ID等内容。其中,服务器选择的协议版本应小于等于客户端Client Hello中的协议版本。

3 Certificate (S->C)

服务器发送Server Hello消息,选择好协议版本和加密算法组合后,将发送 Certificate 消息,该消息包含了服务器的证书等信息,可通过证书链认证该证书的真实性。根据选择的加密算法组合的不同,服务器证书中的公钥也可被用于加密后面握手过程中生成的Premaster secret。

charles验证双向认证 双向验证抓包_服务器_03

4 Server Key Exchange(S->C)

对于标准协议来说是用来进行椭圆曲线协调的,但是国密并不会真正采用椭圆曲线的秘钥协商算法。仍旧是采用传统的DH秘钥协商算法。

charles验证双向认证 双向验证抓包_客户端_04

5 Certificate request (S->C)

双向认证要求客户端发来证书

charles验证双向认证 双向验证抓包_客户端_05

6 Server Hello Done(S->C)

charles验证双向认证 双向验证抓包_客户端_06

7 Certificate(C->S)

因为server要求验证证书,发送了Certificate request ,client在收到该报文后,将自己的证书发送到了服务端。

charles验证双向认证 双向验证抓包_服务器_07

8 Client Key Exchange(C->S)

客户端发送 Client Key Exchange消息,将自己的Diffie-Hellman协议中的Pub Key发送到服务端。

charles验证双向认证 双向验证抓包_ssl_08

9 Certificate verify C->S

发送这个类型的握手需要2个前提条件

服务器端请求了客户端证书
客户端发送了非0长的证书

此时,客户端想要证明自己拥有该证书,必然需要私钥签名一段数据发给服务器验证。

签名的数据是客户端发送certificate verify前,所有收到和发送的握手信息(不包括5字节的record)。其实这个流程和签名server key exchange基本一样。计算摘要,然后签名运算。

charles验证双向认证 双向验证抓包_ssl_09

10 Change Cipher Spec(C->S)

加密传输中每隔一段时间必须改变其加解密参数的协议,因为后续的报文都会采用刚刚协商好的加密秘钥进行加密传输,因此会发送该报文。

charles验证双向认证 双向验证抓包_charles验证双向认证_10

11 Encrypted handshake Message(C->S)

该报文的目的就是,客户端告诉服务端,自己在整个握手过程中收到了什么数据,发送了什么数据。来保证中间没人篡改报文。

该数据采用刚才协商好的秘钥进行加密,顺带验证秘钥。

charles验证双向认证 双向验证抓包_charles验证双向认证_11

12 New Session ticket(S->C)

一种控制后续交互数据量和数据有效值的session设置,这里可能不会生效。

charles验证双向认证 双向验证抓包_https_12


参考阅读

13 Change Cipher Spec (S->C)

加密传输中每隔一段时间必须改变其加解密参数的协议,因为后续的报文都会采用刚刚协商好的加密秘钥进行加密传输,因此会发送该报文。

在后续的连续发送过程中,服务端都可以采用该报文通知客户端,后续将采用新秘钥进行数据加密通信。

charles验证双向认证 双向验证抓包_服务器_13

14 Encrypted handshake Message (S->C)

该报文的目的就是,服务端告诉客户端,自己在整个握手过程中收到了什么数据,发送了什么数据。来保证中间没人篡改报文。

该数据采用刚才协商好的秘钥进行加密,顺带验证秘钥。

charles验证双向认证 双向验证抓包_https_14

15 Application Data

后续采用加密方式进行数据通信。

charles验证双向认证 双向验证抓包_ssl_15