Client Hello消息如何选择记录层版本?

Ash*_*sin 3 wireshark tls

我有两个从同一客户端发送到不同服务器的 Client Hello 消息,我的客户端支持 TLS 1.2 和 TLS 1.3,如客户端 hello 支持的版本中所示。

在第一条消息中,客户端选择记录层版本 TLS 1.3。 客户端 Hello 1 - Wireshark 快照

而在第二条消息中,客户端选择记录层版本 TLS 1.2。(客户端仅发送 hello 并收到警报) Client Hello 2 - Wireshark 快照

客户真的选择了版本吗?如果是这样,如果客户端尚未收到 Server Hello 消息,他如何决定版本。

或者Wireshark是否根据他在服务器问候中看到的设置版本?

这该如何解释呢?

Gil*_*il' 6

或者wireshark是否根据他在服务器问候中看到的设置版本?

是的。该标题行是 Wireshark 对消息的摘要。您可以在消息的详细内容中看到,这两种情况:

  • 记录协议版本(在 ClientHello 消息之外)是 0x0301,这是对应于TLS 1.0的版本号。在TLS 1.2中,ClientHello 消息的记录层版本可以是 0x0303 (TLS 1.2) 或 0x0301 (TLS 1.0),以实现向后兼容性
  • 消息协议版本(ClientHello 消息内)为0x0303,这是 TLS 1.2 对应的版本号。在 TLS 1.0 到 1.2 中,这通常是客户端支持的最高协议版本,服务器通常使用它支持的最高版本进行回复(不一定知道客户端是否支持它,如果它是旧版本)。在TLS 1.3中,该字段已更改为仅用于向后兼容目的,并且supported_versions扩展是强制性的。
  • supported_versions扩展中,客户端表明它支持0x0303(TLS 1.2)和0x0304(TLS 1.3)。

TLS 1.3 规范解释了这些奇怪的版本号指示的原因。它主要是关于向后兼容性,允许客户端宣传 TLS 1.3 支持,同时仍然能够联系仅支持旧版本的服务器。向后兼容性限制不仅与服务器有关,还与防火墙和其他网络设备有关,这些设备只允许它们认为是“良好”TLS 的流量通过。相当多的软件会拒绝高于他们所知道的“好”版本号的版本号,如果 TLS 1.3 使用逻辑版本号,这将阻止 TLS 1.3 流量。

顺便说一句,TLS 1.0 的版本看起来像 3.1、TLS 1.1 的 3.2、TLS 1.2 的 3.3 和 TLS 1.3 的 3.4 的原因是相似的。除了名称之外,TLS 1.0 本质上就是 SSL v3.1,因为与 SSL 3.0 相比,它只进行了相当小的修改,并且将主要版本保持在 1 使向后兼容性更容易。TLS 1.3 与以前的版本有很多差异,因此将其称为 2.0 是有意义的,但协议内的主要版本指示必须保持为 1,以避免被过于受限的软件拒绝。


Ste*_*ich 5

Wireshark 在以下数据包的上下文中看到 ClientHello 。如果握手结果是 TLS 1.2 的通用版本,它将显示 TLS 1.2 记录层,如果是 TLS 1.3,它将显示 TLS 1.3 记录层。如果仅将数据包导出到 ClientHello,则 Wireshark 尚无法查看将使用哪个版本(因为尚未收到服务器回复),然后 Wireshark 甚至将仅显示 TLSv1 记录层,即使这正是与之前相同的 ClientHello:

在此输入图像描述