Ashraf Yassin Asked: 2021-01-18 06:22:58 +0800 CST2021-01-18 06:22:58 +0800 CST 2021-01-18 06:22:58 +0800 CST Client Hello 消息如何选择 Record Layer 版本? 772 我有两条客户端问候消息从同一个客户端发送到不同的服务器,我的客户端支持 TLS 1.2 和 TLS 1.3,如客户端问候支持版本中所示。 在第一条消息中,客户端选择记录层版本 TLS 1.3。 在第二条消息中,客户端选择记录层版本 TLS 1.2。(客户端只发送 hello 并收到警报) 客户真的选择了版本吗?如果是这样,如果客户端还没有收到 Server Hello 消息,客户端如何决定版本。 还是Wireshark根据他在服务器hello看到的设置版本? 这怎么解释? tls wireshark 2 个回答 Voted Gilles 'SO- stop being evil' 2021-01-18T08:44:12+08:002021-01-18T08:44:12+08:00 还是wireshark根据他在服务器hello中看到的设置版本? 是的。该标题行是 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,以避免被过度约束的软件拒绝。 Best Answer Steffen Ullrich 2021-01-18T08:47:26+08:002021-01-18T08:47:26+08:00 Wireshark 在以下数据包的上下文中看到 ClientHello 。如果握手导致 TLS 1.2 的通用版本,它将显示 TLS 1.2 记录层,对于 TLS 1.3,它将显示 TLS 1.3 记录层。如果仅将数据包导出到 ClientHello,则 Wireshark 尚无法查看将使用哪个版本(因为还没有服务器的回复),然后 Wireshark 甚至只会显示 TLSv1 记录层,即使这正是和以前一样的ClientHello:
是的。该标题行是 Wireshark 对消息的摘要。您可以在消息的详细内容中看到,在这两种情况下:
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,以避免被过度约束的软件拒绝。
Wireshark 在以下数据包的上下文中看到 ClientHello 。如果握手导致 TLS 1.2 的通用版本,它将显示 TLS 1.2 记录层,对于 TLS 1.3,它将显示 TLS 1.3 记录层。如果仅将数据包导出到 ClientHello,则 Wireshark 尚无法查看将使用哪个版本(因为还没有服务器的回复),然后 Wireshark 甚至只会显示 TLSv1 记录层,即使这正是和以前一样的ClientHello: