ssl - 为什么此 SSL 连接突然终止

标签 ssl https tcp

我正在尝试发出 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) 类进行。服务器位于共享主机 (Hostgator) 上,具有专用 IP 和来自 COMODO 的 SSL 证书。

问题

谁能帮我理解为什么收到数据包 57 会导致客户端断开连接?

最佳答案

基于 this Q&A我在评论中链接到,并进行了额外的编辑——事实上,该连接尝试是由 Windows XP 中的 C# 进行的,最可能的原因是针对受信任的根的验证可能会失败。

您看到的问题可能不会出现在浏览器中;这可能令人惊讶。之所以如此,是因为除了系统中的内容之外,网络浏览器通常还提供自己的一组信任数据 - 并且可能是最新的,而 Windows 必须依赖更新/服务包,这些更新/服务包不再出现(并且即使,关于这些事情的操作系统政策可能比浏览器更严格)。

解决方案是将根添加到系统信任的根,或者以编程方式将其加载到您的应用程序中。

关于ssl - 为什么此 SSL 连接突然终止,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35190543/

相关文章:

iphone - 通过 SOAP 使用来自 iPhone 的安全 Web 服务

apache - 是否可以在代理和用户之间使用带有 ssl 加密的转发代理?

php - 如何使用在 Apache 2.4 上运行的 PHP 5.6 从 SSL 客户端证书获取 SSL_CLIENT_* 变量?

php - 为我的 API : should I include all certs in chain? 提供 CA 链

java - 反序列化通过 ObjectOutpoutStream 发送的对象

Delphi Indy - 如何为 Indy 10 的 SSL-TCP 客户端/服务器链接获取 SSL 证书

tcp - Mule 3.5.0 CE 创建动态入站端点

php - 为什么在 220 2.0.0 Start TLS 之后不显示任何内容?

c# - 在可移植 HttpClient 中支持 TLS 1.2 和 1.1

ssl - Java8,JBoss AS5,SSLException : "Received fatal alert: handshake_failure"