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