什么是“TLS 版本不耐受”

信息安全 tls
2021-08-15 05:26:27

我试图完全理解SSL Labs server test的报告。

有人可以解释“TLS 版本不容忍”一词吗?我找不到这个术语的任何文档,即使在 SSL 实验室的论坛或他们的SSL Server Rating Guide中也找不到。

例如,对于mijn.ing.nl(荷兰银行网站)的 SSL 报告,它指出:

TLS version intolerance: TLS 1.3  TLS 1.98  TLS 2.98 

不容忍听起来很糟糕,但在这种情况下呢?我也不知道 TLS 版本 1.98 和 2.98。

更新:如今,mijn.ing.nl 的 TLS 版本不容忍已修复(在报告中表示为“否”)

1个回答

在 TLS 中,客户端宣布其最大支持版本然后服务器以实际用于连接的协议版本进行响应。

例如,如果服务器知道 TLS 1.0 和 1.1,并且客户端宣布“我支持 TLS 1.2”,则服务器在不知道 TLS 1.2 可能是什么的情况下,仍然可以响应:“好吧,我们将使用 1.1” .

从理论上讲,如果客户端说“我支持最高 TLS 1.38”(它将被编码ClientHello为值 0x03 0x27 的两个字节),那么支持最高 TLS 1.2 的服务器将不知道 TLS 版本 1.3、1.4 是什么... 到 1.38 是(事实上,这样的版本还不存在,现在定义的最大值是TLS 1.2);但是,该服务器仍然可以说:“1.38 高于/晚于 1.2,因此客户端应该知道 TLS 1.2”并继续说明:“我们将使用 1.2”。

在实践中,有些服务器写得不好,当客户端说“TLS 1.3”时,它们会断开连接。这是一个服务器错误;但一个普遍的。该错误通常由表达“版本不容忍”指定。其中一些有问题的服务器接受某些未知版本,但不是全部。例如,某些服务器会容忍 0 到 254 范围内的任何x的任何“1.x”版本,但会拒绝“2.y”版本。

由于版本不容忍,客户端(Web 浏览器)必须已经包含尝试多次的应急代码。例如,它首先尝试使用 1.2 中的“1.2”连接ClientHello,但如果连接失败,客户端将再次尝试使用“1.0”作为最大支持版本。这是令人厌烦和笨拙的。不能容忍 TLS 1.3 版本的服务器是当指定 TLS 1.3 并且浏览器开始使用它时会很麻烦的服务器。