TLS握手过程及wireshark抓包分析

本文详细介绍了TLS的发展历程和基本运行过程,重点解析了TLS握手的各个步骤,包括ClientHello、ServerHello、证书验证、密钥交换和参数验证。通过Wireshark抓包分析,加深了对TLS协议的理解。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

TLS握手过程及wireshark抓包分析

1.TLS的发展

1994年,NetScape公司设计了SSL协议(Secure Sockets Layer)的1.0版,但是未发布。

1995年,NetScape公司发布SSL 2.0版,很快发现有严重漏洞。

1996年,SSL 3.0版问世,得到大规模应用。

1999年,互联网标准化组织ISOC接替NetScape公司,发布了SSL的升级版TLS 1.0版。

2006年和2008年,TLS进行了两次升级,分别为TLS 1.1版和TLS 1.2版。最新的变动是2011年TLS 1.2的修订版

2.TLS基本运行过程

SSL/TLS协议的基本思路是采用公钥加密法,也就是说,客户端先向服务器端索要公钥,然后用公钥加密信息,服务器收到密文后,用自己的私钥解密。

2.1 基本过程

(1) 客户端向服务器端索要并验证公钥。

(2) 双方协商生成"对话密钥"。

(3) 双方采用"对话密钥"进行加密通信。

2.2 详细运行过程

请添加图片描述

2.2.1客户端发出请求(ClientHello)

客户端主要发送以下信息:

(1) 支持的协议版本,比如TLS 1.0版。

(2) 一个客户端生成的随机数,稍后用于生成"对话密钥"。

(3) 支持的加密方法,比如RSA公钥加密。

### 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 握手的具体步骤 当利用工具如 Wireshark 对 SSL/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 ``` 这里分别对应于前面提到过的两种重要消息形式编码编号. ---
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值