TLS1.3抓包分析(1)——ClientHello

本文通过Wireshark分析了HTTPS连接中TLS1.3的ClientHello报文,详细解读了版本号、随机数、密码套件、扩展等关键字段,包括向后兼容性、会话恢复、加密算法选择以及预共享密钥协商等内容。

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


抓包使用的是WireShark2.6.7,抓包内容为https://tls13.crypto.mozilla.org/(Mozilla的TLS1.3测试页面),浏览器为chrome(需开启TLS1.3),这里我先给出抓包结果:

wireshark抓包
本次从握手的第一步开始分析,即ClientHello,下面是ClientHello的报文内容:
ClientHello
我们需要关注的是Secure Sockets Layer,即安全套接字层,下面是ClientHello所包含的内容:
ClientHello所包含的内容
Record Layer,记录层
Content Type:HandShake,表示内容类型为握手消息
Version:TLS1.0(0x0301),版本号为1.0,为什么是1.0?之前看的draft好像固定1.2版本
后面是握手部分(Handshake)的内容,首先上图:
Handshake Protocol
Handshake Type:ClientHello,表示握手消息类型,此处是ClientHello
Length:557,

<think>好的,我现在要解释TLS 1.3ClientHello报文里的psk_mode扩展的含义。首先,我需要回忆一下TLS 1.3中PSK的相关知识。PSK是预共享密钥,用于简化握手流程,提升性能。 psk_mode扩展应该和PSK的使用方式有关。在TLS 1.3中,有两种主要的握手模式:一种是完整的握手,另一种是使用PSK的简化握手。可能psk_mode用来协商客户端支持的PSK模式。 接下来,我需要确认RFC文档中的具体定义。根据RFC 8446,TLS 1.3的规范,PSK密钥交换模式扩展(psk_key_exchange_modes)确实存在于ClientHello中。用户可能混淆了名称,将psk_key_exchange_modes简称为psk_mode。 这个扩展的作用是客户端告诉服务器它支持的PSK密钥交换模式。可能的模式包括psk_ke(仅PSK)和psk_dhe_ke(PSK与临时Diffie-Hellman组合)。服务器会根据客户端支持的模式和自身的配置选择一种模式继续握手。 需要进一步检查是否在ClientHello中有名为psk_mode的扩展,或者是否是用户对psk_key_exchange_modes的简称。根据RFC,正确的扩展名是psk_key_exchange_modes,所以可能用户提到的psk_mode扩展实际上是这个。 然后,要解释每个模式的具体含义。psk_ke表示仅使用预共享密钥,不提供前向保密;而psk_dhe_ke结合了PSK和临时DH,提供了前向保密。客户端通过这个扩展告知服务器自己支持哪些模式,服务器选择其中一个进行后续流程。 总结来说,psk_mode扩展(正确名称是psk_key_exchange_modes)用于协商PSK在密钥交换中的使用方式,确保客户端和服务器在安全性和性能需求上达成一致。</think>在 TLS 1.3 中,ClientHello 报文中的 `psk_key_exchange_modes` 扩展(用户可能简称为 `psk_mode`)用于**协商客户端支持的预共享密钥(PSK)密钥交换模式**。以下是逐步解析: --- ### 1. **PSK 的作用** TLS 1.3 通过 PSK 实现两种优化: - **会话恢复**:复用之前会话的密钥材料,减少握手开销。 - **预共享密钥认证**:使用预先配置的密钥进行身份验证,无需证书。 --- ### 2. `psk_key_exchange_modes` 扩展的格式 客户端在 ClientHello 中通过该扩展声明支持的 PSK 模式: ```plaintext psk_key_exchange_modes = [PSK模式1, PSK模式2, ...] ``` 模式类型为单字节值,目前定义两种: - `0x00`: **psk_ke`(仅 PSK)** 仅使用预共享密钥,不提供前向保密(Forward Secrecy)。 - `0x01`: **psk_dhe_ke`(PSK + 临时 DH)** 结合 PSK 和临时 Diffie-Hellman 交换,提供前向保密。 --- ### 3. **协商过程** - **客户端**:通过 `psk_key_exchange_modes` 扩展列出支持的模式(如 `[psk_dhe_ke, psk_ke]`)。 - **服务器**:根据自身策略选择一个模式: - 若选择 `psk_dhe_ke`,需生成临时 DH 参数(包含在 ServerHello 或 KeyShare 扩展)。 - 若选择 `psk_ke`,直接复用 PSK 生成密钥,但失去前向保密性。 --- ### 4. **关键注意事项** - **必须性**:如果客户端发送了 `pre_shared_key` 扩展,则必须同时发送 `psk_key_exchange_modes` 扩展。 - **安全性优先级**:服务器通常优先选择 `psk_dhe_ke`,因其提供前向保密。 - **兼容性**:若客户端未发送此扩展,服务器不得使用 PSK 进行密钥交换。 --- ### 5. **示例流程** 1. **ClientHello** ```plaintext psk_key_exchange_modes = [psk_dhe_ke, psk_ke] pre_shared_key = [PSK标识1, PSK标识2...] ``` 2. **ServerHello** ```plaintext selected_identity = 0 // 选择第一个 PSK 标识 key_share = ServerDHParams // 若选择 psk_dhe_ke ``` 3. **密钥计算** - `psk_ke`:直接使用 PSK 派生密钥。 - `psk_dhe_ke`:结合 PSK 和 DH 共享密钥派生密钥。 --- ### 总结 `psk_key_exchange_modes` 扩展是 TLS 1.3 中 PSK 握手的核心机制,它确保了客户端和服务器在以下方面达成一致: - 是否要求前向保密(通过 `psk_dhe_ke`)。 - PSK 如何与其他密钥材料结合使用。 通过此扩展,TLS 1.3 在简化握手的同时,仍能灵活平衡性能与安全性。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值