TLS 告警码对照
握手失败时,抓包或日志里通常会给出 TLS Alert 编号:45 指向证书有效期、48 指向找不到可信签发者、40 多与套件或参数不匹配有关。按编号分诊能快速缩小范围,但要注意同一个编号可能由不同原因触发,需要结合协议版本、证书链与客户端环境一起判断。
基本信息
| 40 handshake_failure | 常见于无共同套件或参数不匹配 |
|---|---|
| 45 certificate_expired | 证书过期或尚未生效,也可能是客户端时钟错误 |
| 48 unknown_ca | 找不到可信签发者,多为链或信任库问题 |
| 70 protocol_version | 协议版本不被接受 |
| 112 unrecognized_name | SNI 名称不被识别 |
典型使用场景
- 从抓包结果快速判断失败方向
- 排查「部分客户端失败、部分正常」的差异
- 结合日志与抓包确认失败发生在握手哪一步
- 为内部文档提供分诊对照表
- 与服务端日志交叉验证客户端看到的现象
常用告警码
常用告警码
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 | 协议版本不可接受 | 协议基线配置 |
| 112 | SNI 名称不被识别 | 请求域名与虚拟主机配置 |
同一个 Alert 可能由不同原因触发:45 也可能是客户端时钟错误,40 需要结合协议版本判断。把编号当作线索而不是结论,并与证书时间、信任库、套件配置逐项交叉验证。