一句话定义:OCSP(Online Certificate Status Protocol,在线证书状态协议)是让客户端在建立连接时向 CA 实时询问「这张证书还有效吗」的协议;证书吊销(revocation)指证书还没到有效期,就由签发机构主动宣布作废。
打个比方:证书像公司发的门禁卡,卡面印着有效期。但员工离职、卡片丢失,日期没到,人也不该再进门。于是前台摆一本挂失簿,保安刷卡时得对一眼。问题在于——保安是否真的每次都查。
两代挂失簿
最早的做法是 CRL(Certificate Revocation List,证书吊销列表):CA 定期发布一份完整名单,客户端下载后本地比对。名单只会越来越长,更新也有延迟。
OCSP 把「下载整本」改成「报号查询」:客户端从证书里取出序列号,向 CA 的 OCSP 响应服务问一句,对方回三种状态之一——good(未吊销)、revoked(已吊销)、unknown(不认识)。更轻、更及时,但代价随之而来:
- 多一次网络往返。握手本来就争分夺秒,再加一次外部查询,体验会变差。
- 隐私外泄。你去问 CA「这张证书还能用吗」,等于告诉 CA 你正在访问哪个网站。
- CA 挂了怎么办。多数浏览器采用软失败(soft-fail):查不到结果就放行。于是攻击者只要在链路上把 OCSP 请求掐掉,一张已吊销的证书就能当有效证书用。这才是 OCSP 常被跳过的根本原因——不是没人想查,而是一个可以被阻断的检查,等于没有检查。
正因如此,主流浏览器普遍弱化实时查询,改用自己下发的吊销信息;部分 CA 也停下 OCSP 服务,转向 CRL 或「短有效期证书」(short-lived certificate)——把有效期压得很短,让吊销这件事本身变得不那么必要。
和相邻概念的区别
| 机制 | 谁去查 | 查什么 | 主要短板 |
|---|---|---|---|
| CRL | 客户端下载整张名单 | 全量吊销清单 | 文件大、更新滞后 |
| OCSP | 客户端实时单条询问 | 一张证书的状态 | 多一次往返、暴露访问、易被软失败放过 |
| OCSP stapling | 服务器代查并随握手下发 | 一张证书的状态 | 需服务器正确配置并保持新鲜 |
| 证书透明度(CT) | 公开日志审计 | 谁签发过哪些证书 | 防的是误签发,不是吊销 |
OCSP stapling(装订)值得单独说:由服务器自己去 CA 取一份带签名的 OCSP 响应,握手时顺手递给客户端。客户端不必额外发请求,延迟和隐私问题一起缓减。
对你的实际意义
运维同学:确认 Web 服务开启了 stapling 并监控响应是否过期;私钥疑似泄露时,换证与吊销要一起做,只换不停用等于名单里留了个后门。开发者:不要把吊销检查当成唯一防线,短有效期、密钥隔离、监控告警是配套动作。普通人:浏览器报「证书已吊销」时不要习惯性点继续,那张卡很可能已经被前台记进挂失簿了。
具体协议细节与各家浏览器策略会持续演进,以官方文档为准。
