应用层报文判读71 条

证书链判读要点

Certificate 消息含整链:叶证书、中间 CA、根(通常省):链路断裂或缺中间证书时,部分客户端失败、部分能过(靠缓存或自动补链)。

证书链要看什么

服务端在握手中会下发一条证书链,通常包含站点自身的证书与若干中间证书,根证书一般不随链下发而是由客户端本地信任库承担。判读的核心是首尾相接:每一级证书的签发者要与上一级的持有者对应,链条从站点证书一路连到受信任的根。链不完整或顺序错乱时,严格校验的客户端会直接失败,而宽松实现可能靠缓存或自动补链蒙混过关,于是出现「有的客户端能用、有的不能用」。

基本信息

适用平台Wireshark / tshark,可解析握手明文中的证书
相关字段tls.handshake.certificate 及证书字段
常见问题缺少中间证书、顺序错乱、包含多余的根证书
观察方式逐级比对签发者与持有者是否首尾相接

典型使用场景

  • 部分客户端校验失败而部分正常,确认链是否完整
  • 更换证书后做上线前验证,确认中间证书是否随之下发
  • 排查自动化客户端报错,确保证书内容与人工访问一致
  • 对比不同后端的证书下发差异,定位配置不一致
  • 为证书过期或吊销类问题提供报文级确认
  • 梳理自建信任链的部署是否正确

观察要点

观察要点
tls.handshake.type == 11                  # 证书消息
tls.handshake.certificate                  # 链中各证书内容
# 逐级检查: 每一级的签发者 = 上一级的持有者,首尾相接即链完整
# 链路末端应连到客户端信任库中的根,根证书通常不下发
# 证书消息已加密的协议版本需要密钥日志才能看到明文

逐级观察读法

观察项含义异常表现
站点证书域名本证书适用的域名范围与访问域名不符即触发告警
有效期区间证书可用时间窗超出区间即校验失败
签发者与持有者链条衔接关系断裂说明链不完整或顺序错
链长度下发的证书数量过短可能缺中间证书,过长含多余根
抓包可解出握手明文中的证书,证书类问题不必依赖去看服务器配置文件,报文里的事实更直接。
在证书消息已加密的协议版本里,没有密钥日志就只能看到消息长度而看不到内容,判读方式要相应调整。

易错点

  • 缺失中间证书在某些客户端被自动补齐:问题被掩盖到严格校验的客户端上才暴露,测试要覆盖多类客户端
  • 证书链顺序错误:严格校验的实现会直接失败,而顺序问题在宽松客户端上完全看不出来
  • 把根证书一起下发:增加握手体积且无必要,判定时应区分必要证书与多余证书
  • 只在服务端配置文件上核对:真实下发的链可能与配置不一致,必须以报文内容为准

数据来源与参考

  • RFC 5280(证书链)
  • RFC 8446
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌