一、OCSP概述:我为什么一定要讲它
说实话,我刚入行做PKI系统的时候,对OCSP这玩意儿是有点不屑的。觉得不就是查一下证书有没有被吊销吗?搞那么复杂干嘛。后来有一次线上事故,客户端因为CRL(证书吊销列表)太大,下载超时,整个业务挂了半小时。
嗯,从那以后,我老老实实把OCSP重新学了一遍。
1.1 什么是OCSP?
OCSP,全称是 Online Certificate Status Protocol,也就是在线证书状态协议。它的核心作用就是回答一个问题:「这张证书现在还有效吗?」
你想想看,浏览器访问一个HTTPS网站,服务器亮出它的证书。你怎么知道这张证书没有被CA吊销?方法其实就两个:
- 下载CRL(证书吊销列表)—— 一个黑名单文件,但体积可能很大
- 在线查询OCSP —— 直接问CA的OCSP响应器,这张证书目前是什么状态
我个人的习惯是:只要场景允许,优先用OCSP。为什么呢?因为快,而且流量可控。
OCSP返回的状态只有三种:
- good(良好)—— 证书有效,未被吊销
- revoked(已吊销)—— 证书已被吊销
- unknown(未知)—— 响应器不认识这张证书
1.2 为什么要有OCSP?
说白了,CRL模式在早期互联网还行,但到了移动互联网时代,问题就暴露了。
我在项目中遇到过这样一个坑:某个银行客户,他们的CA每天签发几万张证书,CRL文件动辄几十MB。客户端每次建立SSL连接都要去拉这个文件,流量浪费不说,解析时间也长。更麻烦的是,如果CRL的更新周期设置得太短,CA服务器扛不住;设置得太长,响应又不够及时。
OCSP就是为了解决这个问题诞生的。它最早在RFC 2560(1999年)里定义,后来升级到RFC 6960(2013年),这也是我们现在常用的版本。
| 对比项 | CRL | OCSP |
|---|---|---|
| 查询方式 | 客户端下载整个列表 | 客户端按需查询单个证书 |
| 响应体积 | 可能很大(MB级) | 很小(KB级) |
| 实时性 | 取决于CRL更新频率 | 实时查询,响应更快 |
| 隐私性 | 较好(不暴露查询目标) | 较差(暴露了查询的证书序列号) |
| 服务端压力 | 集中下载,带宽压力大 | 分散查询,适合高并发 |
一个小经验:如果你在做一个金融或政务的项目,建议同时支持CRL和OCSP。CRL兜底,OCSP做主查询通道。这种双保险方案我见过好几次审计都能过。
1.3 OCSP的核心目标
我们做技术的人,凡事喜欢问一句「到底要解决什么问题」。OCSP的目标其实很清晰:
- 低延迟 —— 查询一个证书的状态,响应时间应该在毫秒级
- 低带宽 —— 一个OCSP请求/响应通常只有几百字节到几KB
- 可扩展 —— 能扛住大规模并发查询
- 安全 —— OCSP响应本身必须由CA签名,防止中间人篡改
记得我前几年帮一家电商平台做HTTPS改造,他们每天要处理几百万次OCSP查询。一开始他们用公网的CA OCSP响应器,结果延迟飘忽不定。后来我建议他们内部架设一个OCSP缓存代理,配合本地的Stapling(OCSP装订),性能一下就稳了。
1.4 OCSP的发展历程
这里简单捋一下时间线,方便大家理解:
- RFC 2560 (1999年) —— OCSP首次标准化
- RFC 6960 (2013年) —— 加入更多扩展(如Nonce防重放、多证书查询)
- OCSP Stapling (TLS扩展) —— 让Web服务器自己缓存OCSP响应,客户端免去额外的查询
- Must-Staple (2017年) —— Chrome等浏览器开始要求关键证书必须启用Stapling
说实话,OCSP Stapling这个点子真的聪明。它让服务器替客户端去查OCSP,然后直接把签名后的响应「装订」在TLS握手里。这样客户端不用额外发请求,隐私问题也解决了。
注意:OCSP Stapling虽然好,但不是所有CA都支持。如果你要启用Must-Staple,先确认你的CA服务商有这个能力。我曾经有个客户,买完证书才发现签发机构不支持Stapling扩展,又折腾去换证书,亏大了。
1.5 OCSP在PKI体系中的角色
一张图帮你理解OCSP在整个公钥基础设施(PKI)里的位置:
从这张图你可以看到,CA是整个信任体系的根。它生成CRL提供给客户端下载,也提供OCSP响应器供客户端实时查询。而OCSP Stapling则是在服务端和客户端之间再加一层缓存优化,减少网络消耗。
1.6 我是怎么用的
给你几个我实际项目里总结的用法建议:
- 公网场景:直接用CA的OCSP响应器,配合OCSP Stapling,隐私和性能都兼顾
- 内网/企业CA:自建OCSP响应器,控制高可用和响应延迟
- 高安全要求:开启Nonce扩展防止重放攻击,签名必须验
再次提醒:OCSP响应必须验证签名!曾经有人搭建钓鱼CA,伪造OCSP回答「good」来欺骗客户端。不验签等于白查。
好了,关于OCSP是什么、为什么有它、它解决了什么问题,到这里你应该有了一个整体印象。接下来我们会一步步深入,从协议细节到实际编码,带你完整实现一个OCSP在线状态查询接口。