TLS 1.3 Hello Retry Request 机制详解
在 TLS 1.3 的握手过程中,客户端首先发送 ClientHello 消息,其中包含支持的密码套件、扩展和密钥共享参数。有时候服务端发现客户端提供的参数需要调整,就会发送一个特殊的响应——Hello Retry Request(简称 HRR)。本文详解 HRR 的触发条件、工作原理和实际观察方法。 什么是 Hello Retry Request Hello Retry Request 是 TLS 1.3 引入的一种握手优化机制。当服务端收到的 ClientHello 消息中的参数不符合要求时(比如缺少必要的密钥共享、密码套件不匹配等),服务端不会直接拒绝连接,而是发送一个 HelloRetryRequest 消息,要求客户端重新发送带有正确参数的 ClientHello。 这与 TLS 1.2 的行为形成对比——TLS 1.2 中如果密码套件不兼容,服务端会直接发送 Handshake Failure 警报并终止连接。 HRR 的触发条件 HRR 主要在以下几种情况被触发: 1. Key Share 不符合要求 客户端发送的 key_share 扩展中提供的密钥共享参数不被服务端接受。常见原因包括: 使用了服务端不支持的椭圆曲线 密钥共享参数格式不正确 2. 缺少必要的 Cookie 服务端要求验证客户端身份时,会在 HRR 中包含 cookie 扩展,客户端下一次 ClientHello 必须原样返回这个 Cookie。 3. 密码套件协商 虽然现代 TLS 1.3 实现通常支持所有标准密码套件,但在某些特殊配置下,服务端可能要求客户端使用特定的套件。 HRR 工作流程 完整的 HRR 流程如下:...