PCAP 中的 TLS 握手失败:ClientHello、ServerHello、证书、警报和重置证据
如何通过读取 ClientHello、ServerHello、证书、警报和 TCP 重置证据来诊断数据包捕获中的 TLS 握手失败。
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”之类的搜索查询,答案位于握手边界中。良好的包手术工作流程可以保留该边界而不是隐藏它。