wireshark抓包分析SSL/TLS协议

SSL/TLS协议一般有两种握手过程,一种是SSL握手,一种是会话恢复。前些时候在写HTTP和HTTPS协议区别的时候介绍了SSL协议的相关理论知识,但多少还是有点抽象,今天我们可以通过wireshark抓包来分析下SSL握手的过程。

一、正常的握手过程

(一)过程如下

wireshark抓包分析SSL/TLS协议

(二)wireshark抓到的对应的包如下

wireshark抓包分析SSL/TLS协议

(三)具体的包分析

  • Client Hello

wireshark抓包分析SSL/TLS协议

包中包含了Version(版本信息)、session ID Length(是否有保存会话),Cipher Suites(加密套件)

  • Server Hello

wireshark抓包分析SSL/TLS协议

包中包含了TLS的version(版本)、Cipher suite(服务器选择的加密组件)

  • Server发送Certificate

wireshark抓包分析SSL/TLS协议

  • Server发送Server Key Exchange

wireshark抓包分析SSL/TLS协议

这里用的是DH协议来交换对称加密的**。

  • Server 发送Server Hello Done

wireshark抓包分析SSL/TLS协议

只是简单地告知客户端,服务器的Hello信息已经发完了

  • Client发送Client Key Exchange

wireshark抓包分析SSL/TLS协议

这里也是用DH协议来交换对称加密的**

  • Client发送Change Cipher Spec

wireshark抓包分析SSL/TLS协议

用来告知服务器,我接下来发的消息要用咱之前协商好的加密套件进行加密了。

  • Client发送Encrypted HandShake Message

wireshark抓包分析SSL/TLS协议

包中包含一段加密信息,也就是流程图中的finished消息。

  • Server发送New Session Ticket

wireshark抓包分析SSL/TLS协议

分配给客户端一个新的Session Ticket,和Session ID 类似。客户端接收到后保存到本地,今后再和服务器通信时,只要发送这个Session Ticket就行了。

  • Server发送Change Cipher Spec

wireshark抓包分析SSL/TLS协议

用来告知客户端,我接下来发送的消息要用咱之前协商好的加密组件进行加密,你需要对其进行解密。

  • Server发送Encrypted HandShake Message

wireshark抓包分析SSL/TLS协议

包中带有一段加密的信息,即握手过程图中的finished消息。

  • Client和Server进行正常通信

wireshark抓包分析SSL/TLS协议

Client解密出信息后便知道已经和服务器建立好连接了,之后便开始发送Application Data。Server返回给它对应的加密信息。

二、会话恢复过程

会话恢复是指只要客户端和服务器已经通信过一次,它们就可以通过会话恢复的方式来跳过整个握手阶段二直接进行数据传输。

(一)恢复过程

wireshark抓包分析SSL/TLS协议

(二)wireshark抓到的对应的包

wireshark抓包分析SSL/TLS协议

(三)

  • 客户端发送Client Hello包

wireshark抓包分析SSL/TLS协议

包中携带了上一次建立的session ID,并且session_ticket扩展字段为0。说明我们这里使用的是session ID机制。

  • 服务器返回Server Hello信息

wireshark抓包分析SSL/TLS协议

包中包含了当前服务器所使用的TLS版本,以及它支持的最高版本。

  • 服务器发送Change Cipher Spec信息

wireshark抓包分析SSL/TLS协议

告知客户端,我接下来发送的消息要用咱之前协商好的**和加密组件进行加密了。用于验证之保存的session会话是有效的。

  • 服务器发送finished信息

wireshark抓包分析SSL/TLS协议

  • Client发送change_cipher_spec信息

wireshark抓包分析SSL/TLS协议

告知服务器我将用咱之前协商好的**套件和**加密信息。

  • Client发送finished信息

wireshark抓包分析SSL/TLS协议

会话恢复完成,建立SSL连接