3、OCSP机制详解:在线证书状态协议

CRL 有个硬伤——它是个“大名单”。你想想看,每次验证证书都得下载整个列表,少则几百 KB,多则几 MB。在移动端或者高并发场景下,这简直要命。

OCSP 就是来解决这个问题的。它不给你整份名单,而是让你直接问 CA:“这张证书现在有效吗?”CA 回答“有效”或“已吊销”,完事。

我个人习惯是,只要条件允许,优先用 OCSP。但这里面的坑也不少,咱们一个一个说。

3.1 什么是 OCSP

OCSP,全称 Online Certificate Status Protocol,定义在 RFC 6960。说白了,它是一个“请求-响应”式的轻量级协议。

客户端拿着证书,向 OCSP 响应器(Responder)发起查询。响应器返回这张证书当前的状态。整个过程不需要下载任何列表,一次 HTTP 请求就够了。

我记得第一次在项目中部署 OCSP 时,被一个细节坑过——OCSP 响应本身也是要签名的。如果响应器的证书不被客户端信任,那响应就是废纸一张。嗯,这个后面会细说。

3.2 OCSP 请求与响应流程

流程其实不复杂,我画了一张图帮你理清脉络:

OCSP 请求与响应流程 客户端 OCSP 响应器 CA 证书数据库 ① OCSP 请求(序列号 + 颁发者) ② 查询状态 ③ OCSP 响应(good/revoked/unknown) OCSP 响应内容 • 证书序列号 + 状态(good / revoked / unknown) • 本次更新时间(thisUpdate) • 下次更新时间(nextUpdate)—— 缓存控制的关键

流程就这么三步。但实际落地时,有几个细节你一定要注意:

  • 请求内容:客户端需要提供证书的颁发者信息(Issuer Name Hash)和证书序列号。不需要传整张证书,省流量。
  • 响应签名:OCSP 响应必须由 CA 或受信任的响应器签名。如果响应没签名或签名无效,客户端必须视为“未知”。
  • 缓存控制:响应里的 nextUpdate 字段告诉客户端“这个结果在什么时间之前有效”。我见过不少系统忽略这个字段,每次都重新查询,白白浪费性能。
我的经验:OCSP 请求可以用 HTTP GET 或 POST。GET 方式把请求参数编码到 URL 里,适合简单查询。POST 方式可以携带更复杂的请求体。我个人习惯用 GET,因为更容易做 CDN 缓存。

3.3 OCSP Stapling 技术

OCSP 有个明显的短板——隐私问题。你每次查询 OCSP 响应器,CA 就知道你在访问哪个网站。说白了,CA 能拿到你的浏览记录。

另外,OCSP 查询本身也有延迟。如果响应器挂了,客户端可能超时,甚至拒绝连接。

OCSP Stapling 就是来解决这两个问题的。它让服务器自己“代劳”查询,然后把结果“钉”在 TLS 握手里发给客户端。

流程是这样的:

  1. Web 服务器定期(比如每小时)向 OCSP 响应器查询自己的证书状态。
  2. 服务器把 OCSP 响应缓存起来。
  3. 客户端发起 TLS 握手时,服务器直接把缓存的 OCSP 响应塞进 Certificate 消息里。
  4. 客户端验证这个响应,不需要再自己去查 OCSP。

我曾经在一个金融项目中遇到过这种情况:客户端数量巨大,OCSP 响应器被查得扛不住了。换成 Stapling 之后,响应器负载直接降了 90%。

核心区别:

  • 普通 OCSP:客户端查 → 隐私泄露 + 延迟
  • OCSP Stapling:服务器代查 → 隐私保护 + 性能提升

3.4 OCSP 的优缺点

没有完美的协议。OCSP 有它的长处,也有它的短板。我整理了一张表,方便你对比:

维度 优点 缺点
实时性 单张证书查询,响应快,秒级出结果 依赖网络,响应器宕机就查不了
流量 每次只传几十字节,比 CRL 省太多 高并发场景下,响应器压力大
隐私 Stapling 模式下隐私保护很好 普通 OCSP 会暴露用户访问记录
部署 协议简单,客户端支持广泛 需要额外维护 OCSP 响应器基础设施
缓存 支持 nextUpdate 缓存,减少重复查询 缓存过期后若响应器不可用,会降级
避坑指南:我曾经遇到过一个案例——OCSP 响应器返回了“revoked”,但客户端因为缓存了之前的“good”响应,继续信任那张证书。嗯,这里要注意:OCSP 响应里的 thisUpdate 和 nextUpdate 一定要认真校验。如果客户端不检查时间戳,缓存可能成为安全漏洞。

说到底,OCSP 和 CRL 不是二选一的关系。我建议你根据场景来:

  • 内网环境:OCSP Stapling 是首选,性能好,隐私无忧。
  • 公网环境:OCSP + CRL 双保险。客户端先查 OCSP,查不到再回退到 CRL。
  • 高安全场景:强制 OCSP,禁止软失败。宁可断网也不信任已吊销证书。

好了,OCSP 的核心内容就这些。记住一点:OCSP 不是银弹,但它和 CRL 配合使用,基本能覆盖 99% 的证书吊销验证场景。