为什么此 SSL 连接突然终止
Why this SSL connection ends abruptly
我正在尝试发出 HTTPS POST 请求。连接在一开始就突然结束。我使用 Wireshark 进行了以下捕获。 192.168.0.33 是我的客户端尝试连接到服务器。 192.185.47.210 是服务器。
No. Time Source Destination Protocol Length Info
51 2.476681000 192.168.0.33 192.185.47.210 TCP 62 1143→443 [SYN] Seq=0 Win=65535 Len=0 MSS=1460 SACK_PERM=1
52 2.534541000 192.185.47.210 192.168.0.33 TCP 62 443→1143 [SYN, ACK] Seq=0 Ack=1 Win=29200 Len=0 MSS=1460 SACK_PERM=1
53 2.534559000 192.168.0.33 192.185.47.210 TCP 54 1143→443 [ACK] Seq=1 Ack=1 Win=65535 Len=0
54 2.534720000 192.168.0.33 192.185.47.210 TLSv1 163 Client Hello
56 2.592332000 192.185.47.210 192.168.0.33 TCP 60 443→1143 [ACK] Seq=1 Ack=110 Win=29200 Len=0
57 2.594550000 192.185.47.210 192.168.0.33 TLSv1 191 Server Hello, Change Cipher Spec, Encrypted Handshake Message
58 2.596455000 192.168.0.33 192.185.47.210 TCP 54 1143→443 [FIN, ACK] Seq=110 Ack=138 Win=65398 Len=0
60 2.654542000 192.185.47.210 192.168.0.33 TCP 60 443→1143 [FIN, ACK] Seq=138 Ack=111 Win=29200 Len=0
61 2.654558000 192.168.0.33 192.185.47.210 TCP 54 1143→443 [ACK] Seq=111 Ack=139 Win=65398 Len=0
我怀疑问题出在数据包 57 上,因为在收到此数据包后,客户端会断开 TCP 连接。数据包 57 看起来像
Frame 57: 191 bytes on wire (1528 bits), 191 bytes captured (1528 bits) on interface 0
Ethernet II, Src: Actionte_39:b9:de (18:1b:eb:39:b9:de), Dst: CadmusCo_f6:2b:9b (08:00:27:f6:2b:9b)
Internet Protocol Version 4, Src: 192.185.47.210 (192.185.47.210), Dst: 192.168.0.33 (192.168.0.33)
Transmission Control Protocol, Src Port: 443 (443), Dst Port: 1143 (1143), Seq: 1, Ack: 110, Len: 137
Secure Sockets Layer
TLSv1 Record Layer: Handshake Protocol: Server Hello
Content Type: Handshake (22)
Version: TLS 1.0 (0x0301)
Length: 81
Handshake Protocol: Server Hello
TLSv1 Record Layer: Change Cipher Spec Protocol: Change Cipher Spec
Content Type: Change Cipher Spec (20)
Version: TLS 1.0 (0x0301)
Length: 1
Change Cipher Spec Message
TLSv1 Record Layer: Handshake Protocol: Encrypted Handshake Message
Content Type: Handshake (22)
Version: TLS 1.0 (0x0301)
Length: 40
Handshake Protocol: Encrypted Handshake Message
其他信息:
客户端是 Windows XP 上的 C# 程序 运行。该调用由 WebRequest (https://msdn.microsoft.com/en-us/library/system.net.webrequest%28v=vs.110%29.aspx) class 发出。服务器位于共享主机 (Hostgator) 上,具有专用 IP 和来自 COMODO 的 SSL 证书。
问题
谁能帮我理解为什么收到数据包 57 导致客户端断开连接?
可能服务器要求客户端发送客户端证书,而您没有。关闭连接是服务器唯一的防御措施。
基于我在评论中链接到的 this Q&A,以及额外的编辑 - 事实上,该连接尝试是由 Windows XP 中的 C# 进行的,最可能的原因是针对 Trusted 的验证根可能会失败。
您看到的问题可能不会出现在浏览器中;这可能令人惊讶。之所以如此,是因为网络浏览器通常会提供自己的一组信任数据,除了系统中的内容之外——而且可能是最新的,而 Windows 必须依赖 updates/service 包,这些包不不再出现(即使 OS 关于这些事情的政策可能比浏览器更严格一点)。
解决方案是将根添加到系统信任的根,或者以编程方式将其加载到您的应用程序中。
我正在尝试发出 HTTPS POST 请求。连接在一开始就突然结束。我使用 Wireshark 进行了以下捕获。 192.168.0.33 是我的客户端尝试连接到服务器。 192.185.47.210 是服务器。
No. Time Source Destination Protocol Length Info
51 2.476681000 192.168.0.33 192.185.47.210 TCP 62 1143→443 [SYN] Seq=0 Win=65535 Len=0 MSS=1460 SACK_PERM=1
52 2.534541000 192.185.47.210 192.168.0.33 TCP 62 443→1143 [SYN, ACK] Seq=0 Ack=1 Win=29200 Len=0 MSS=1460 SACK_PERM=1
53 2.534559000 192.168.0.33 192.185.47.210 TCP 54 1143→443 [ACK] Seq=1 Ack=1 Win=65535 Len=0
54 2.534720000 192.168.0.33 192.185.47.210 TLSv1 163 Client Hello
56 2.592332000 192.185.47.210 192.168.0.33 TCP 60 443→1143 [ACK] Seq=1 Ack=110 Win=29200 Len=0
57 2.594550000 192.185.47.210 192.168.0.33 TLSv1 191 Server Hello, Change Cipher Spec, Encrypted Handshake Message
58 2.596455000 192.168.0.33 192.185.47.210 TCP 54 1143→443 [FIN, ACK] Seq=110 Ack=138 Win=65398 Len=0
60 2.654542000 192.185.47.210 192.168.0.33 TCP 60 443→1143 [FIN, ACK] Seq=138 Ack=111 Win=29200 Len=0
61 2.654558000 192.168.0.33 192.185.47.210 TCP 54 1143→443 [ACK] Seq=111 Ack=139 Win=65398 Len=0
我怀疑问题出在数据包 57 上,因为在收到此数据包后,客户端会断开 TCP 连接。数据包 57 看起来像
Frame 57: 191 bytes on wire (1528 bits), 191 bytes captured (1528 bits) on interface 0
Ethernet II, Src: Actionte_39:b9:de (18:1b:eb:39:b9:de), Dst: CadmusCo_f6:2b:9b (08:00:27:f6:2b:9b)
Internet Protocol Version 4, Src: 192.185.47.210 (192.185.47.210), Dst: 192.168.0.33 (192.168.0.33)
Transmission Control Protocol, Src Port: 443 (443), Dst Port: 1143 (1143), Seq: 1, Ack: 110, Len: 137
Secure Sockets Layer
TLSv1 Record Layer: Handshake Protocol: Server Hello
Content Type: Handshake (22)
Version: TLS 1.0 (0x0301)
Length: 81
Handshake Protocol: Server Hello
TLSv1 Record Layer: Change Cipher Spec Protocol: Change Cipher Spec
Content Type: Change Cipher Spec (20)
Version: TLS 1.0 (0x0301)
Length: 1
Change Cipher Spec Message
TLSv1 Record Layer: Handshake Protocol: Encrypted Handshake Message
Content Type: Handshake (22)
Version: TLS 1.0 (0x0301)
Length: 40
Handshake Protocol: Encrypted Handshake Message
其他信息:
客户端是 Windows XP 上的 C# 程序 运行。该调用由 WebRequest (https://msdn.microsoft.com/en-us/library/system.net.webrequest%28v=vs.110%29.aspx) class 发出。服务器位于共享主机 (Hostgator) 上,具有专用 IP 和来自 COMODO 的 SSL 证书。
问题
谁能帮我理解为什么收到数据包 57 导致客户端断开连接?
可能服务器要求客户端发送客户端证书,而您没有。关闭连接是服务器唯一的防御措施。
基于我在评论中链接到的 this Q&A,以及额外的编辑 - 事实上,该连接尝试是由 Windows XP 中的 C# 进行的,最可能的原因是针对 Trusted 的验证根可能会失败。
您看到的问题可能不会出现在浏览器中;这可能令人惊讶。之所以如此,是因为网络浏览器通常会提供自己的一组信任数据,除了系统中的内容之外——而且可能是最新的,而 Windows 必须依赖 updates/service 包,这些包不不再出现(即使 OS 关于这些事情的政策可能比浏览器更严格一点)。
解决方案是将根添加到系统信任的根,或者以编程方式将其加载到您的应用程序中。