TLS版本不匹配(?)

时间:2016-08-03 14:04:01

标签: ssl https tls1.2

让我们说我作为客户的一方支持TLS V1.0,1.1和1.2。 远程站点支持TLS V1.0和1.1。 双方支持相同的密码。

我的问题:

1 - 根据我的理解,我将始终使用我可用的最高TLS版本启动通信。在那种情况下,我将如何能够与另一方联系?

2 - 以下是如上所述的客户端和服务器之间的Wireshark CLIENT HELLO捕获。

TLSv1.1 Record Layer: Handshake Protocol: Client Hello
    Content Type: Handshake (22)
    Version: TLS 1.2 (0x0303)
    Length: 172
    Handshake Protocol: Client Hello
        Handshake Type: Client Hello (1)
        Length: 168
        Version: TLS 1.2 (0x0303)
        Random
        Session ID Length: 0
        Cipher Suites Length: 52
        Cipher Suites (26 suites)
        Compression Methods Length: 1
        Compression Methods (1 method)
        Extensions Length: 75
        Extension: server_name
        Extension: elliptic_curves
        Extension: ec_point_formats
        Extension: signature_algorithms
        Extension: SessionTicket TLS
        Extension: renegotiation_info

此连接尝试最终会产生"无法创建SSL / TLS安全通道"。我怀疑这与描述为" TLSV1.1记录层"的内容有关。和" 版本:TLS 1.2(0x0303)"。这可能是连接失败的原因吗?

3 个答案:

答案 0 :(得分:2)

客户端启动与ClientHello的握手,在那里它显示它支持的最佳版本,即本例中的TLS 1.2。然后,服务器回复ServerHello,其中包含服务器支持的最佳版本,该版本等于或小于客户端提供的版本(例如,在您的情况下为TLS 1.1)。如果客户端不愿意接受此版本(即客户端配置为仅支持TLS 1.2,则不会更少),它将关闭连接。

答案 1 :(得分:0)

猜测你有一个较旧版本的Wireshark,因为它报告了TLSv1.1,但在后续数据包中,Record和ClientHello都清楚地表明了TLSv1.2。保存捕获,升级Wireshark,然后重新加载捕获。

更新:确保SSL \ TLS握手完成非常重要;否则,由于某种原因,Wireshark将在“协议”字段中报告错误的TLS协议版本。

答案 2 :(得分:0)

有两个TLS版本与客户端Hello消息一起发送。第一个是记录层版本,它描述了您用于通信的TLS版本。第二个版本是Client Hello值,表示客户端支持的最大版本。

我在Wireshark捕获中看到了三个TLS版本。我认为“TLSv1.1记录层:握手协议:客户端Hello”中对1.1版的引用是错误的。

您的客户端似乎正在发送1.2版记录层版本中指示的版本1.2的客户端Hello。服务器,因为它不支持1.2版,拒绝在记录层。为了解决这个问题,客户端可以在版本1.0记录中发送版本1.2 Client Hello。这将允许服务器使用它支持1.1版的1.0版进行通信,后续通信将使用1.1版。