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