首页/安全/加密与证书速查/TLS 告警码对照
TLS 与 HTTPS60 条

TLS 告警码对照

握手失败时抓包或日志会给出 Alert 编号:certificate_expired 指向有效期、unknown_ca 指向信任链、handshake_failure 多为套件或参数不匹配,按码分诊可快速缩小范围。

加密与证书速查安全更新于 2026-10-13

TLS 告警码对照

握手失败时,抓包或日志里通常会给出 TLS Alert 编号:45 指向证书有效期、48 指向找不到可信签发者、40 多与套件或参数不匹配有关。按编号分诊能快速缩小范围,但要注意同一个编号可能由不同原因触发,需要结合协议版本、证书链与客户端环境一起判断。

基本信息

40 handshake_failure常见于无共同套件或参数不匹配
45 certificate_expired证书过期或尚未生效,也可能是客户端时钟错误
48 unknown_ca找不到可信签发者,多为链或信任库问题
70 protocol_version协议版本不被接受
112 unrecognized_nameSNI 名称不被识别

典型使用场景

  • 从抓包结果快速判断失败方向
  • 排查「部分客户端失败、部分正常」的差异
  • 结合日志与抓包确认失败发生在握手哪一步
  • 为内部文档提供分诊对照表
  • 与服务端日志交叉验证客户端看到的现象

常用告警码

常用告警码
40  handshake_failure          握手失败(常见:无共同套件或参数不匹配)
42  bad_certificate            证书解析或校验失败
43  unsupported_certificate    证书类型不支持
44  certificate_revoked        证书被吊销
45  certificate_expired        证书过期或尚未生效
46  certificate_unknown        无法处理的证书问题
48  unknown_ca                 找不到可信签发者(链问题)
70  protocol_version           协议版本不可接受
71  insufficient_security      强度不足
86  inappropriate_fallback     客户端回退到过低版本被拒
109 missing_extension          缺少必需扩展
112 unrecognized_name          SNI 名称不被识别
120 no_application_protocol    ALPN 无共同协议

抓包与复现

抓包与复现
# 从抓包中统计出现的告警类型
# tshark -r cap.pcap -Y 'tls.alert_message' -T fields -e tls.alert_message.desc | sort | uniq -c
# 用 s_client 复现并观察输出
openssl s_client -connect example.com:443 -servername example.com </dev/null 2>&1 | head -20

编号与排查方向

编号含义优先检查
40握手失败套件与参数交集
45证书过期或未生效服务端证书有效期与客户端时钟
48找不到可信签发者证书链与信任库
70协议版本不可接受协议基线配置
112SNI 名称不被识别请求域名与虚拟主机配置
同一个 Alert 可能由不同原因触发:45 也可能是客户端时钟错误,40 需要结合协议版本判断。把编号当作线索而不是结论,并与证书时间、信任库、套件配置逐项交叉验证。

易错点

  • 把 45 一律归因于服务端证书 → 忽略客户端时钟问题,修复方向从一开始就错了
  • 忽略 86 隐含的降级尝试信号 → 漏掉客户端被迫降级的真实原因
  • 只凭 Alert 编号下结论 → 未结合协议版本与链信息,判断容易偏差
  • 不与其他日志交叉验证 → 抓包与服务端日志结论冲突时难以下判断

数据来源与参考

  • RFC 8446 §6(Alert 协议)
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌