应用层报文判读71 条

TLS Alert 消息判读

握手或传输中任一侧可发 Alert 终止连接:级别(warning/fatal)与描述码指明原因,是加密层故障的直接证据。

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名称典型原因
0close_notify正常关闭信号,不是故障
10unexpected_message报文顺序异常,对端实现或中间设备有干预
20bad_record_macMAC/解密校验失败,也可能密钥不一致
40handshake_failure无共同参数,服务端策略直接拒绝
42bad_certificate证书签名或格式校验失败
45certificate_expired证书已过期
48unknown_ca证书链不受信,常见于缺中间证书
70protocol_version两端无共同协议版本
71insufficient_security强度不足,服务端只允许高强套件时出现
80internal_error对端内部错误,需看对端日志
100no_renegotiation服务端拒绝重协商(TLS 1.2)
112unrecognized_nameSNI 中的主机名在服务端不存在
120no_application_protocolALPN 无交集,HTTP/2 协商失败常见
告警的发送侧是问题感知方,不一定是根源方:服务端因证书链不完整发 unknown_ca(48),根源在服务端配置;客户端因只支持旧版本发 protocol_version(70),根源在客户端能力。定责要两端对照。
TLS 1.3 除 close_notify、user_canceled 外均为 fatal,且握手后告警已加密。要看清必须导出会话密钥(SSLKEYLOGFILE)或两端同时抓包对照,否则只能看到 Encrypted Alert。

易错点

  • 把 close_notify(0) 当故障:它是正常关闭信号,warning 级也不等于有问题
  • 只看单侧抓包就定责:中间设备可能代为回复或改写告警码,必须两端对照
  • 忽略告警方向:同一个 desc 码由不同侧发出,结论可能完全相反
  • 看到 Encrypted Alert 就断言没有告警细节:1.3 中看不到不等于没发生

数据来源与参考

  • RFC 8446(Alert)
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌