TLS1.2客户端和TLS1.3服务器握手失败

时间:2018-10-22 13:01:08

标签: openssl tls1.2 libssl tls1.3

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服务器通信?   -还是还有其他原因导致失败?

1 个答案:

答案 0 :(得分:0)

我猜这是发生了什么事

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

由于客户端请求1.2而服务器不支持初始连接,因此初始连接失败(步骤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或在客户端上启用TLS 1.3,应允许它们进行通信。