Wireshark分析TLS1.2通信过程
本文主要记录一次HTTPS通信过程中的数据包,使用wireshark抓包,着重分析TLS协议数据包
数据包比较小
先是TCP三次握手的过程,从目标端口是443可以看出这是一个HTTPS通信
TLS协议
TLS协议栈主要分为两层
- 底层:TLS记录协议
- 上层:TLS握手协议、TLS密码变化协议、TLS警告协议
TLS记录协议:建立在可靠的传输协议(如TCP)之上,对上层协议进行封装,提供保密性和完整性。上层协议实现客户和服务器之间会话的建立、认证和密钥协商。
TLS握手协议
位于SSL记录协议之上
用途:建立SSL会话和连接,协商协议版本、密码算法、认证、共享秘密,等等
协议格式
主要流程
Client Hello:客户端向服务端打招呼;携带支持的协议、支持的安全套件供服务端选择;
Server Hello:服务端回应客户客户端的招呼信息;结合客户端的信息,选择合适的加密套件;
Certificate:服务端向客户端发送自己的数字证书(此证书包含服务端的公钥),以实现验证身份;
Server Key Exchange:服务端向客户端发送基于选择的加密套件生成的公钥(此公钥为椭圆曲线的公钥,用于协商出对称加密的密钥);
Server Hello Done:服务端向客户端表示响应结束;
Client Key Exchange:客户端向服务端发送自己生成的公钥(此公钥为椭圆曲线的公钥,用于协商出对称加密的密钥);
Change Cipher Spec:变更密码规范;告知服务端/客户端,以后的通信都是基于AES加密的;
Encrypted Handshake Message:基于协商生成的密钥,用AES加密验证信息让服务端/客户端进行认证;如果对方可以解密,则双方认证无误开始通信;
New Session Ticket:是优化SSL连接的一种方法,此处不做特别说明
具体分析
下面根据wireshark的抓包具体分析
Client Hello
客户端向服务端发送建立连接请求,客户端会携带支持的版本号、支持的加密套件、客户端随机数(用于协商对称加密的密钥)、支持的HTTP协议
Server Hello
根据客户端所携带的内容,确定建立连接版本、加密套件,生成服务端随机数(用于协商对称加密的密钥),我们可以看到服务器用的版本也是TLS 1.2 ,协商的加密套件是:TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256
TCP segment of a reassembled PDU
在分析的过程中,看到了几个含有TCP segment of a reassembled PDU字样的数据包,而且是在TLS握手协议中间的TCP包,我觉得很奇怪就查询了这个字段的含义。
TCP segment of a reassembled PDU,字面意思是要重组的协议数据单元(PDU:Protocol Data Unit)的TCP段。比如由多个数据包组成的HTTP协议的应答包
总的来说:
此处PDU是指上层(HTTPS)的Protocol Data Unit,意指上层协议的一个协议段太长,无法放入单个TCP数据包。如果你在wireshark中禁用相关上层协议分析,就不会显示这个东西了。
Certificate, Server Key Exchange, Server Hello Done
Certificate:向客户端发送由权威ca签发的证书,以验证身份
Server Key Exchange:基于Server Hello阶段选择的ECDHE交换密钥算法,发送椭圆曲线生成的公钥
Server Hello Done:服务端结束打招呼阶段
Client Key Exchange, Change Cipher Spec, Encrypted Handshake Message
Client Key Exchange:基于协商选择的ECDHE交换密钥算法,发送它生成的椭圆曲线的公钥
Change Cipher Spec:变更密码规范协议,它非常简单,就是一条通知消息,告知对方以后的通信都是加密的;
Enctypted Handshare Message:生成对称加密密钥之后,发送一条加密的数据,让服务端解密验证;
New Session Ticket, Change Cipher Spec, Encrypted Handshake Message
New Session Ticket:TLS建立连接的优化方法
Change Cipher Spec:告诉客户端以后的通信是加密的
Enctypted Handshare Message:发送一条经过密钥加密的数据,让客户端验证;验证通过则开始进行加密通信;
Applicatiion Data:表示客户端/服务端已经开始基于TLS进行通信了;