首页/安全/加密与证书速查/OCSP 软失败与容错设计

OCSP 软失败与容错设计

OCSP 查询默认软失败:查不到应答时多数客户端继续连接,这意味着吊销传播存在延迟。运维上既要接受这一现实,也要避免把查询失败直接当作证书无效。

加密与证书速查安全更新于 2026-10-13

软失败是怎么回事

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 与缩短证书有效期这两条路。

易错点

  • 吊销后不做替换,指望客户端立即感知:软失败下大量客户端仍会放行,等于没吊销。
  • 严格模式上线前未确认装订链路健康:查询失败会从「忽略」变成「全面拒绝」,影响面反转。
  • 把 OCSP 与 CRL 混用而不测试:不同客户端回退路径不同,结果不可预测。
  • 把查询失败当成证书无效:多数场景下这是网络或服务可用性问题,误判会导致错误的处置动作。

数据来源与参考

  • RFC 6960(OCSP)
  • RFC 7633(must-staple 扩展)
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌