PCAP 中的 TLS 握手失败:ClientHello、ServerHello、证书、警报和重置证据

如何通过读取 ClientHello、ServerHello、证书、警报和 TCP 重置证据来诊断数据包捕获中的 TLS 握手失败。

PCAP, TLS, SSL, 握手, ClientHello

TLS 握手失败通常被报告为“SSL 错误”、“证书问题”、“握手失败”或“连接重置”。这些消息很有用,但 PCAP 可以显示握手停止的位置。这个位置很重要。

ServerHello 之前的 TLS 失败与证书验证警报不同。 ClientHello 之后的 TCP 重置与证书交换后的致命 TLS 警报不同。数据包捕获时间线可以识别边界。

从 TCP 连接开始

在调试 TLS 之前,请确认 TCP:

  • SYN
  • SYN/ACK
  • ACK
  • 来自客户端的数据

如果 TCP 从未建立,则这不是 TLS 握手失败。它是路由、防火墙、端口、服务器可达性或 TCP 策略。

如果 TCP 建立并且客户端发送“ClientHello”,则 TLS 开始。

ClientHello 显示客户提供的内容

ClientHello 可以揭示:

  • 支持的 TLS 版本
  • 提供的密码套件
  • SNI 主机名
  • ALPN协议
  • 支持团体
  • 签名算法

如果 SNI 丢失,服务器可能会返回默认证书或拒绝握手。如果客户端仅提供旧协议或密码,服务器可能会以握手失败或重置来响应。

这就是为什么捕获对于旧的嵌入式客户端、代理和自定义集成非常有用。

ServerHello 或无 ServerHello

如果客户端发送“ClientHello”并且没有“ServerHello”到达,请检查:

  • 防火墙或中间盒丢弃
  • 服务器策略默默关闭
  • 大型握手消息的 MTU/路径问题
  • 从服务器重置 TCP
  • 负载均衡器行为

如果“ServerHello”到达,请检查所选版本和密码。服务器的选择可能会解释以后的失败。

警报是证据,而不是噪音

TLS 警报可以提供非常丰富的信息:

  • 未知CA
  • 坏证书
  • 握手失败
  • 协议版本
  • 非法参数
  • 关闭通知

证书传递后客户端发出的致命警报通常指向信任链、主机名不匹配、证书过期或不受支持的证书属性。在“ClientHello”之后来自服务器的致命警报可能指向密码、协议、SNI、客户端证书或策略。

修剪捕获时不要丢弃警报。

PCAP 手术适合的场合

PCAP 手术应该帮助工程师隔离 TLS 对话并保留握手证据。 TLS 支持的有用派生捕获包括:

  • TCP握手
  • ClientHello
  • ServerHello(如果存在)
  • 证书消息(如果存在)
  • TLS 警报
  • TCP 重置
  • 消息之间的时间间隔

如果必须对捕获物进行消毒,请务必小心。删除证书详细信息、SNI 或有效负载长度也可能会删除失败的原因。清理决策应与故障排除目标相匹配。

对于诸如“TLS 握手失败 pcap”、“ClientHello no ServerHello”或“SSL 警报未知 CA Wireshark”之类的搜索查询,答案位于握手边界中。良好的包手术工作流程可以保留该边界而不是隐藏它。