为什么此 SSL 连接突然终止

问题描述 投票:0回答:3

我正在尝试发出 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 会导致客户端断开连接?

ssl https tcp
3个回答
2
投票

基于我在评论中链接到的此问答,以及额外的编辑 - 事实上,该连接尝试是由 Windows XP 中的 C# 进行的,最可能的原因是针对受信任根的验证可能会失败。

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

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


0
投票

我遇到了完全相同的问题,对我来说问题是我从证书存储加载了我的客户端证书。该证书一定是在 Windows 更新或其他操作过程中损坏的。我从商店中删除了证书并将其添加回来,突然间问题就消失了。我知道这个问题很旧,但我希望它可以帮助别人。


-1
投票

服务器可能要求客户端发送客户端证书,而您没有。关闭连接是服务器唯一的防御措施。

© www.soinside.com 2019 - 2024. All rights reserved.