2

在 openssl 升级到 1.1.1 版本后,我有一个场景,我的客户端(odbc)在 TLS1.2 上运行,而我的服务器(数据库)在 TLS 1.3 上运行,它在客户端出现以下错误而失败。

“SSL 握手失败原因 [错误:1407743E:SSL 例程:SSL23_GET_SERVER_HELLO:tlsv1 警报不适当的回退]。”

在 TLS 1.3 文档中写道,默认情况下启用回退保护,当 TLS 1.2 客户端与 TLS 1.3 服务器通信时,服务器会发送特殊字节以进行回退保护。

以下是我的疑问。- 我必须在我的客户处处理这些特殊字节吗?- TLS 1.2 客户端是否需要任何其他处理来与 TLS 1.3 服务器通信?- 或者还有其他失败的原因吗?

4

1 回答 1

1

我猜这就是发生的事情:

1) 客户端发送 TLS 1.2 握手
2) 服务器关闭连接,因为它仅支持 TLS 1.3
3) 客户端重试使用 TLS 1.1 握手和回退 SCSV(参见 RFC 7507)
4) 服务器发送错误消息:不适当的回退

初始连接失败(第 2 步),因为客户端请求 1.2 而服务器不支持它。如果服务器可能支持此版本,客户端会使用 1.1 重试。发送回退 SCSV 以指示 1.1 不是客户端支持的最高版本。

根据 SCSV RFC (7507):

如果 TLS_FALLBACK_SCSV 出现在 ClientHello.cipher_suites 中,并且服务器支持的最高协议版本高于 ClientHello.client_version 中指示的版本,则服务器必须以致命的不适当_回退警报响应。

为了回答您的问题,我相信您提到的特殊字节是 SCSV,但这是由客户端发送并由服务器处理的,因此客户端无事可做。我认为失败是由于客户端和服务器没有可以与之通信的通用 TLS 版本。如果客户端只支持 1.2,而服务器只支持 1.3,他们将无法就版本达成一致,并且连接将失败。在服务器启用 TLS 1.2 或在客户端启用 1.3 应该允许它们进行通信。

于 2018-12-20T19:03:00.630 回答