【问题标题】:Why this SSL connection ends abruptly为什么此 SSL 连接突然结束
【发布时间】:2016-02-04 18:27:34
【问题描述】:

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

【问题讨论】:

  • 您能否提供有关您正在使用的软件的更多详细信息?
  • @TNW。在问题末尾的“其他信息”下添加。
  • 进行了查找,check those. 连接可能会尝试验证 XP 的可信根,这可能是有点古老的说服。
  • 你的意思是服务器发送了它的证书而客户端拒绝了它?我不理解我发布的 TLSv1 跟踪,因此无法判断是否发送了证书。你能指出你在哪里看到的吗?
  • 我习惯了 Wireshark 快速识别问题。由于这似乎没有帮助,您可以尝试增加 .NET 日志记录吗?您可以按照以下步骤吐出一些 SSL 调试信息:msdn.microsoft.com/en-us/library/ty48b824(v=vs.110).aspx

标签: ssl tcp https tcp-ip


【解决方案1】:

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

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

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

    • 根据数据包捕获,客户端正在发送 FIN(数据包 #58)作为对服务器 hello、证书等(数据包 #57)的响应。这意味着客户端而不是服务器启动关闭。还有,服务端没有发送CertificateRequest,那客户端为什么要发送客户端证书呢?
    猜你喜欢
    • 2021-12-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-06-19
    • 1970-01-01
    • 2016-10-29
    相关资源
    最近更新 更多