软失败是怎么回事
OCSP 的默认行为是软失败(soft-fail):客户端去查询吊销状态但拿不到应答(超时、跨网不可达、服务端故障)时,多数实现会继续完成握手,也就是把「未知」当作「可用」。这解释了两个常见困惑:为什么吊销一张证书后部分用户仍能访问,以及为什么内网环境里 OCSP 全断却没人报错。硬失败只在证书声明了 must-staple 或客户端配置了严格吊销检查时出现,此时查询失败会直接拒绝连接。
基本信息
| 软失败 | 无应答时多数实现继续握手,吊销状态视为未知 |
|---|---|
| 硬失败 | must-staple 或严格检查配置下直接拒绝连接 |
| 查询方式 | openssl ocsp -issuer issuer.pem -cert leaf.pem -url <ocsp 地址> |
| 装订 | 服务端预先取回 OCSP 响应随握手下发,减少客户端出网依赖 |
| 传播延迟 | 吊销生效受响应缓存周期与客户端行为影响 |
| 运营共识 | 吊销必须配套替换证书,不能只依赖客户端即时感知 |
典型使用场景
- 吊销后验证:确认目标客户端是否真的拒绝连接,而不是继续放行。
- 装订链路体检:检查服务端能否取回并刷新 OCSP 响应。
- 内网隔离环境设计:评估是否能让服务端装订,避免终端出网查询。
- 事故复盘:判断某次中断是 OCSP 不可达导致还是别的环节。
- 策略权衡:决定哪些业务值得启用 must-staple 这类硬失败策略。
观察应答与状态
观察应答与状态
# 直接向 OCSP 服务查询某张证书的状态
openssl ocsp -issuer issuer.pem -cert leaf.pem -url http://ocsp.example.com -no_nonce -resp_text | head -20
# 观察服务端是否装订了响应
openssl s_client -connect example.com:443 -servername example.com -status </dev/null 2>&1 | grep -A3 'OCSP Response'
# 检查响应中的 thisUpdate / nextUpdate,判断缓存窗口状态与客户端行为
| 查询结果 | 含义 | 默认客户端行为 |
|---|---|---|
| good | 未吊销 | 正常继续 |
| revoked | 已吊销 | 拒绝连接(严格实现) |
| unknown | 签发者不认识该证书 | 多数按软失败继续 |
| 无应答 / 超时 | 查询失败 | 软失败下继续,硬失败下拒绝 |
| 装订响应过期 | 服务端缓存未刷新 | 部分客户端忽略并转为自行查询 |
多家 CA 在收缩 OCSP 服务(以各家官方公告为准)。吊销方案设计不应只依赖 OCSP,应同时考虑 CRL 与缩短证书有效期这两条路。