首页/网络/抓包与流量分析速查/OCSP 装订状态判读
应用层报文判读71 条

OCSP 装订状态判读

证书状态由服务端代取并随握手下发(装订):Certificate 消息附带状态响应,抓包可查看状态与时间戳,避免客户端额外外连查询。

OCSP 装订是什么

OCSP 用来查询证书是否被吊销。传统方式是客户端自己去联系签发机构的服务器,多一次外部连接,也可能因连不上而失败。装订(Stapling)把这一步前置到服务端:服务端先取好状态响应,握手时随证书一起下发,客户端直接使用。TLS 1.2 里它是独立的证书状态握手消息,TLS 1.3 里状态被放进证书条目的扩展中。

基本信息

抓包字段tls.handshake.certificate_status 用于证书状态相关字段
版本差异TLS 1.2 为独立的证书状态握手消息;TLS 1.3 放在证书条目扩展里
握手类型TLS 1.2 中证书状态消息的握手类型编号为 22
状态有效性状态响应自带更新时间与下次更新时间,过期后严格客户端可能拒连
未装订后果客户端可能自行回源查询,增加一次外部连接与延迟
判读前提加密流量需解密后才能看到握手细节

典型使用场景

  • 加载耗时优化:确认装订是否生效,判断首屏慢里是否包含额外的状态查询
  • 连通性排查:客户端无法直连签发机构时,装订缺失会直接导致握手失败
  • 配置核对:验证负载均衡或反向代理是否透传了装订状态
  • 灰度验证:更换证书后确认新证书的状态响应被正确下发
  • 故障定位:区分证书本身问题与状态响应过期导致的问题

查看装订状态

查看装订状态
# TLS 1.2: 单独的状态消息(握手类型 22)
tshark -r a.pcap -Y 'tls.handshake.type == 22' -T fields -e frame.number -e ip.src | head
tshark -r a.pcap -Y 'tls.handshake.type == 22' -V | head -60
# TLS 1.3: 状态在证书条目扩展里, 展开证书消息查看
tshark -r a.pcap -Y 'tls.handshake.type == 11' -V | grep -i -A5 'status'
# 统计一次会话中状态响应出现的次数, 装订失效时该项常为空
tshark -r a.pcap -Y 'tls.handshake.certificate_status' -T fields -e frame.number | wc -l

线索与含义

抓包线索含义下一步
存在状态消息服务端已装订并下发状态核对响应中的更新时间是否新鲜
完全没有状态消息未启用装订客户端可能额外回源查询, 增加延迟
状态响应已过期装订内容陈旧检查服务端的更新任务是否正常
多节点行为不一致部分节点未配置装订逐节点核对配置与版本
握手直接失败无状态消息客户端严格校验且不接受缺失启用装订或临时放宽校验策略
没有装订不等于证书有问题:客户端可能自行回源查询并正常通过,只是多了一次外部往返。判断影响时要看客户端是否真的发起了状态查询连接。
状态响应过期是比较隐蔽的问题:它只体现在握手里的这一个字段上,日常抓包很容易被忽略,需要专门按该字段过滤确认。

易错点

  • 把未装订直接判定为证书故障,实际上客户端可能已自行完成状态查询,判断前先确认握手是否整体成功
  • 忽略状态响应自身的有效期,装订存在但内容陈旧,严格客户端仍会拒连,排查时容易只盯着证书时间
  • 在未解密的流量上找不到状态消息就下结论,应先确认解密配置是否生效
  • 只检查了单个节点:反向代理集群里部分节点未启用装订,问题呈间歇性,需要按节点分别抓包核对

数据来源与参考

  • RFC 6066(status_request)
  • RFC 8446
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌