让我们说我作为客户的一方支持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)"。这可能是连接失败的原因吗?
答案 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版。