一、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的目标其实很清晰:

  1. 低延迟 —— 查询一个证书的状态,响应时间应该在毫秒级
  2. 低带宽 —— 一个OCSP请求/响应通常只有几百字节到几KB
  3. 可扩展 —— 能扛住大规模并发查询
  4. 安全 —— 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)里的位置:

OCSP在PKI体系中的核心位置 CA(证书颁发机构) 签发/吊销管理 CRL分发点 黑名单文件 OCSP响应器 在线状态查询 客户端(浏览器/应用) TLS握手时验证证书 OCSP Stapling(TLS扩展) 服务器代为缓存OCSP响应 OCSP是客户端与CA之间的实时状态查询桥梁,确保证书可信

从这张图你可以看到,CA是整个信任体系的根。它生成CRL提供给客户端下载,也提供OCSP响应器供客户端实时查询。而OCSP Stapling则是在服务端和客户端之间再加一层缓存优化,减少网络消耗。

1.6 我是怎么用的

给你几个我实际项目里总结的用法建议:

  • 公网场景:直接用CA的OCSP响应器,配合OCSP Stapling,隐私和性能都兼顾
  • 内网/企业CA:自建OCSP响应器,控制高可用和响应延迟
  • 高安全要求:开启Nonce扩展防止重放攻击,签名必须验

再次提醒:OCSP响应必须验证签名!曾经有人搭建钓鱼CA,伪造OCSP回答「good」来欺骗客户端。不验签等于白查。

好了,关于OCSP是什么、为什么有它、它解决了什么问题,到这里你应该有了一个整体印象。接下来我们会一步步深入,从协议细节到实际编码,带你完整实现一个OCSP在线状态查询接口。