答案1
答案2
或者 wireshark 是否根据他在 server 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,此字段已更改为仅用于向后兼容目的,并且supports_versions 扩展是强制性的。
- 在里面supports_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,以避免被过度受限的软件拒绝。