首页/网络/抓包与流量分析速查/Wireshark 过滤 TLS 告警
Wireshark 技巧75 条

Wireshark 过滤 TLS 告警

tls.alert_message 过滤握手失败告警:level=2 是致命错误(如 handshake_failure、bad_certificate),是"连不上 HTTPS"的直接证据。

TLS 告警过滤

TLS 告警(Alert)是握手或传输失败时对端发出的显式通知,Wireshark 用 tls.alert_message 过滤。level 为 2 是致命错误,连接随即终止;level 为 1 只是警告。HTTPS 连不上、证书校验失败这类问题,抓包里最直接的证据就是这条告警以及它的描述码。TLS 1.3 之后部分告警进入加密记录,需要密钥日志才可见。

基本信息

适用平台Wireshark(需按需配置 TLS 解密)
语法tls.alert_message / tls.alert_message.level == 2 / tls.alert_message.desc
级别含义level 1 警告,level 2 致命并终止连接
常见描述码40 handshake_failure、42 bad_certificate、48 unknown_ca、70 protocol_version

典型使用场景

  • HTTPS 无法建立:读告警级别与描述码,直接区分是证书问题还是协议版本问题
  • 证书链排查:48 unknown_ca 通常意味对端不信任签发者
  • 协议版本不匹配:70 protocol_version 多为服务端不支持客户端提议的版本
  • 客户端拒绝服务端证书:42 bad_certificate 结合方向判断责任方
  • 灰度验证:老旧客户端连不上新网关时,用告警过滤快速确认根因

常用示例

常用示例
tls.alert_message                     # 所有 TLS 告警
tls.alert_message.level == 2          # 只看致命错误
tls.alert_message.level == 2 && tls.alert_message.desc == 40   # handshake_failure
tcp.port == 443 && tls.alert_message  # 限定在 HTTPS 端口上找

常见告警描述码

描述码名称典型原因
40handshake_failure双方没有共同可接受的参数
42bad_certificate收到的证书无法通过校验
48unknown_ca证书链中的签发者不被信任
70protocol_version对端不支持所提议的协议版本
告警由两端之一发出,看报文的源目地址与方向就能判断是客户端拒绝服务端,还是服务端拒绝客户端。这个信息往往比描述码本身更决定下一步去找谁。
TLS 1.3 把握手完成后的多数内容放进加密记录,只有配置了密钥日志文件才能解出告警。如果过滤结果为空,先确认解密是否生效,再下「没有告警」的结论。
连接正常收尾时也会发送 close_notify 告警(描述码 0,属警告级别而非致命错误)。统计致命告警时把这类排除掉,否则会把设计内的正常关闭也算成故障。

易错点

  • 告警由两端之一发出,看方向判断是客户端拒绝服务端证书还是服务端拒绝协议
  • TLS 1.3 之后部分告警在加密记录中,需要密钥日志才可见
  • 只看到 TCP RST 而没有告警,说明连接在更早阶段被中断,别把链路重置当成证书问题
  • 同一个描述码在不同实现里含义略有差别,结论要与两侧应用日志互相印证

数据来源与参考

  • Wireshark 显示过滤器参考(tls.alert_message)
  • RFC 8446(Alert 协议)
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌