TLS 1.2 向后兼容性。

信息安全 加密 tls
2021-08-25 12:43:01

问题是,如果客户端只支持 TLS 1.1 而服务器启用了 TLS1.2 或 SSL 3.0 会怎样。然后它会因为服务器没有启用 TLS 1.1 而回到 SSL 3.0 吗?

1个回答

在 SSL/TLS 握手中,事情是这样的:客户端发送最大支持版本然后服务器选择将使用的版本,并将其发送给客户端。

根据定义,服务器不会选择它不支持的协议版本。服务器将尝试选择它支持且客户端也支持的版本;但是,服务器只有关于客户端支持的部分信息,因为它只收到“最大支持版本”。如果客户端说“达到 TLS 1.1”,则服务器知道客户端支持 TLS 1.1(或至少声称支持)但不支持 TLS 1.2;客户端是否支持/接受 TLS 1.0 或更旧的协议版本对于服务器来说是未知的。

在您设想的情况下,如果服务器仅支持 TLS 1.2 和 SSL 3.0,那么它将仅选择 TLS 1.2 或 SSL 3.0。如果客户端说“我支持最高 TLS 1.1”,那么服务器不会选择 TLS 1.2(因为此时服务器知道客户端不支持它);因此,它将选择 SSL 3.0,这是它唯一的选择。客户端在收到服务器的回复后,很可能会说“SSL 3.0?那是什么古董服务器?为什么不用打火石工具呢?” 并拒绝进一步沟通。

基本上,为了握手成功,必须有客户端和服务器都支持的协议版本。如果客户端支持TLS 1.1,服务器支持TLS 1.2和SSL 3.0,那么就没有共同的协议版本,通信将不会发生。


现在可能会出现一些奇怪的情况,客户端和服务器没有注意到他们确实有一个他们都支持的版本。例如,客户端出于某种原因支持 TLS 1.0 和 1.2,但不支持 TLS 1.1;并且服务器支持 TLS 1.0 和 1.1,但不支持 TLS 1.2。在这种情况下,客户端会声称支持“最高 TLS 1.2”,而只知道 TLS 1.0 和 1.1 的服务器会选择 TLS 1.1,客户端会拒绝。

实际上,这种情况不会发生,因为实现在它们支持的协议版本范围内没有“漏洞”。如果客户端或服务器支持XY版本,那么它也将支持XY之间的所有版本支持 TLS 1.0 和 TLS 1.2 但不支持 TLS 1.1 几乎没有意义。