Alert 消息是什么
Alert 是 TLS 协议自带的错误与关闭通知,报文只有两个字节:Level(1=warning、2=fatal)与 Description 码;对端收到 fatal 告警后必须立即关闭连接。它是加密层故障最直接的证据:握手失败、证书不受信、无共同套件,最后都体现为某一次 Alert。TLS 1.3 握手完成后所有告警都在加密记录里,没有密钥时 Wireshark 只能显示为 Encrypted Alert,看不到描述码。
基本信息
| 适用平台 | Wireshark 4.x / tshark,Linux 与 Windows 一致 |
|---|---|
| 关键字段 | tls.alert_message.level、tls.alert_message.desc |
| 级别取值 | 1=warning、2=fatal(1.3 中除关闭类告警基本为 fatal) |
| 可见性 | 握手阶段明文可见;握手后需解密才看得到 |
典型使用场景
- 定位握手失败根因:从 desc 码反推是证书、版本还是套件问题
- 判断是客户端拒绝还是服务端拒绝(看告警的发送方向)
- 排查 mTLS:certificate_required(116) 说明服务端要求客户端证书
- 排查 SNI 配置:unrecognized_name(112) 多因虚拟主机没配对应证书
- 排查 ALPN 不一致:no_application_protocol(120) 常见于 HTTP/2 协商失败
筛出全部告警
筛出全部告警
tshark -r t.pcap -Y "tls.alert_message" -T fields -e frame.number -e ip.src -e tls.alert_message.level -e tls.alert_message.desc
# 输出示例:12 10.0.0.5 2 40 -> 服务端发 fatal handshake_failure
tshark -r t.pcap -Y "tls.alert_message.desc==48" # 只找 unknown_ca
# Wireshark GUI:过滤 tls.alert_message 后展开 Secure Sockets Layer 视图看 Level 与 Description常见描述码对照
| desc | 名称 | 典型原因 |
|---|---|---|
| 0 | close_notify | 正常关闭信号,不是故障 |
| 10 | unexpected_message | 报文顺序异常,对端实现或中间设备有干预 |
| 20 | bad_record_mac | MAC/解密校验失败,也可能密钥不一致 |
| 40 | handshake_failure | 无共同参数,服务端策略直接拒绝 |
| 42 | bad_certificate | 证书签名或格式校验失败 |
| 45 | certificate_expired | 证书已过期 |
| 48 | unknown_ca | 证书链不受信,常见于缺中间证书 |
| 70 | protocol_version | 两端无共同协议版本 |
| 71 | insufficient_security | 强度不足,服务端只允许高强套件时出现 |
| 80 | internal_error | 对端内部错误,需看对端日志 |
| 100 | no_renegotiation | 服务端拒绝重协商(TLS 1.2) |
| 112 | unrecognized_name | SNI 中的主机名在服务端不存在 |
| 120 | no_application_protocol | ALPN 无交集,HTTP/2 协商失败常见 |
告警的发送侧是问题感知方,不一定是根源方:服务端因证书链不完整发 unknown_ca(48),根源在服务端配置;客户端因只支持旧版本发 protocol_version(70),根源在客户端能力。定责要两端对照。
TLS 1.3 除 close_notify、user_canceled 外均为 fatal,且握手后告警已加密。要看清必须导出会话密钥(SSLKEYLOGFILE)或两端同时抓包对照,否则只能看到 Encrypted Alert。