wireshark抓包分析SSL/TLS协议

SSL/TLS握手与会话恢复详解
本文详细解析了SSL/TLS协议的两种握手过程:正常的握手过程和会话恢复过程。通过Wireshark抓包,展示了SSL/TLS如何在客户端与服务器间建立安全连接,包括版本信息、加密套件的选择、对称加密密钥的交换等关键步骤。

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

一、正常的握手过程

(一)过程如下

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

(三)具体的包分析

  • Client Hello

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

  • Server Hello

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

  • Server发送Certificate

  • Server发送Server Key Exchange

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

  • Server 发送Server Hello Done

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

  • Client发送Client Key Exchange

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

  • Client发送Change Cipher Spec

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

  • Client发送Encrypted HandShake Message

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

  • Server发送New Session Ticket

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

  • Server发送Change Cipher Spec

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

  • Server发送Encrypted HandShake Message

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

  • Client和Server进行正常通信

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

二、会话恢复过程

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

(一)恢复过程

(二)wireshark抓到的对应的包

(三)

  • 客户端发送Client Hello包

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

  • 服务器返回Server Hello信息

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

  • 服务器发送Change Cipher Spec信息

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

  • 服务器发送finished信息

  • Client发送change_cipher_spec信息

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

  • Client发送finished信息

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

 

 

### Wireshark 抓包分析 SSL 握手协议的数据包详解 #### 1. SSL/TLS 协议概述 SSL/TLS 是一种用于在网络上传输敏感信息的安全协议。它通过加密技术和身份验证来保护数据的机密性和完整性。在实际应用中,Wireshark 可以用来捕获并分析这些协议握手过程。 #### 2. 数据包结构解析 在一个典型的 SSL/TLS 握手过程中,以下是主要的数据包及其含义: - **Client Hello**: 客户端向服务器发起连接请求,并提供其支持的 TLS 版本、密码套件列表以及其他参数[^1]。 - **Server Hello**: 服务器响应客户端的请求,选定一个双方都支持的 TLS 版本和密码套件,并返回其证书链。 - **Certificate**: 如果选择了基于公钥的身份验证,则此消息包含服务器的 X.509 数字证书。 - **Server Key Exchange (可选)**: 当所选的密码套件需要额外的信息交换时(例如 Diffie-Hellman 密钥交换),该消息会被发送。 - **Server Hello Done**: 表明服务器已经完成了它的初始化阶段。 - **Client Key Exchange**: 客户端使用服务器提供的公钥或其他方法生成预主秘钥(pre-master secret),并通过加密的方式传递给服务器。 - **Change Cipher Spec**: 这是一个单独的消息类型,表示后续的所有通信都将采用新协商好的加密算法进行保护。 - **Finished**: 发送方证明自己拥有正确的共享秘密值;接收方可据此验证整个握手流程的有效性。 上述每一步都可以在 Wireshark抓包日志中找到对应的帧号(Frame Number)及相关细节。 #### 3. 使用 Wireshark 分析 SSL 握手的具体步骤 当利用工具如 WiresharkSSL/TLS 流量进行监控时,可以看到完整的握手序列。需要注意的是由于现代浏览器通常启用前向安全性(forward secrecy),即使能够解码部分早期流量,也无法轻易获取到最终会话密钥(session key)[^2]。 对于那些启用了会话恢复功能的应用场景来说,比如 Session Ticket 或者 Session ID 方式下再次访问同一站点时可能省略掉某些重复操作从而简化了整体交互逻辑[^4]。 下面是一些关键字段解释: - `Content Type`: 指定当前记录的内容类别,例如 Handshake 类型意味着正在进行初始认证或者重新协商等动作。 - `Length`: 记录负载的实际大小,单位为字节数。 - `Signed Hash`: 包含之前所有已交换过的握手消息摘要签名结果,用于防止篡改攻击。 #### 4. 示例代码展示如何过滤特定类型的 SSL 数据流 如果想专注于观察某个 IP 地址之间的 HTTPS 请求/应答情况,可以在 Wireshark 输入框输入类似这样的显示过滤器表达式: ```bash ip.addr==<目标IP> && tcp.port==443 ``` 这将仅显示出涉及指定主机且目的端口为标准 HTTPS 端口号(即443)的相关条目。 另外还可以进一步细化条件以便更精确地定位感兴趣的事件,比如说只看 Client Hello 和 Server Hello : ```bash ssl.handshake.type == 1 || ssl.handshake.type == 2 ``` 这里分别对应于前面提到过的两种重要消息形式编码编号. ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值