什么是OCSP、CRL?
一句话概括:OCSP(在线证书状态协议)和 CRL(证书吊销列表)是 PKI 体系中用于检查 SSL/TLS 证书是否已被吊销的两种机制,确保浏览器只信任仍在有效期且未被作废的证书。
为什么需要证书吊销机制?
SSL/TLS 证书在有效期内可能因各种原因需要提前作废(吊销),例如:
- 私钥泄露或被盗
- 证书被错误签发(如域名不匹配)
- 企业合并、域名变更或不再需要该证书
- CA 机构发现证书存在安全隐患
- 证书被用于钓鱼或恶意活动
当证书被吊销后,浏览器需要一种机制来实时查询该证书是否仍然有效,这就是 OCSP 和 CRL 的作用。
CRL — 证书吊销列表
全称:Certificate Revocation List(证书吊销列表)
类型:离线机制(批量下载)
工作原理
CA 机构维护一份被吊销证书的序列号列表(CRL),并定期发布到互联网上。浏览器在验证证书时,需要:
- 从证书中获取 CRL 分发点(CDP)的 URL
- 下载该 CRL 文件
- 检查当前证书的序列号是否在 CRL 中
CRL 的特点
- 格式:二进制格式(DER 编码),通常需要解析才能读取
- 大小:随着被吊销证书的增加,文件可能变得很大
- 更新频率:由 CA 设置,通常每隔几小时或几天更新一次
- 隐私问题:下载 CRL 意味着告诉 CA 你在访问哪些网站(即便只是检查证书)
CRL 的缺点
- 延迟问题:CRL 更新有间隔,吊销通知可能有延迟
- 性能问题:大文件 CRL 下载耗时长,影响页面加载
- 隐私泄露:浏览器访问 CRL URL 可能被网络监控
- 验证不便:客户端需要额外解析 CRL 格式
OCSP — 在线证书状态协议
全称:Online Certificate Status Protocol(在线证书状态协议)
类型:在线机制(实时查询)
工作原理
OCSP 提供了一种实时查询单张证书状态的机制:
- 浏览器从证书中获取 OCSP 响应器的 URL
- 浏览器向 OCSP 服务器发送请求,查询该证书的序列号
- OCSP 服务器返回证书的实时状态(Good / Revoked / Unknown)
- 浏览器根据响应决定是否信任该证书
OCSP 响应代码
- Good(正常):证书有效,未被吊销
- Revoked(已吊销):证书已被 CA 吊销,浏览器应拒绝信任
- Unknown(未知):OCSP 服务器不知道该证书的状态(可能是其他 CA 签发)
OCSP 的优点
- 实时性:每次连接都能查询最新的证书状态
- 精确性:只查询单张证书,无需下载整个吊销列表
- 性能更好:响应数据量小,查询速度快
- 用户友好:更好的用户体验,不会长时间卡住页面加载
OCSP 的缺点
- 隐私问题:浏览器向 OCSP 服务器发送请求时,会暴露正在访问的域名
- 可用性问题:如果 OCSP 服务器不可达,浏览器面临"解锁还是阻塞"的权衡
- 性能问题:每次 HTTPS 连接都需要额外的一次 OCSP 查询(连接时间增加)
- 中间人攻击风险:攻击者可能阻断 OCSP 请求,诱导浏览器使用缓存的证书状态
OCSP Stapling
OCSP Stapling(OCSP 装订)是 OCSP 机制的重大改进,由服务器预先从 CA 的 OCSP 响应器获取证书状态,并在 TLS 握手期间将其直接发送给浏览器。浏览器无需再向 OCSP 服务器发起额外请求。
工作原理(对比)
传统 OCSP 流程:
浏览器 ──→ CA 的 OCSP 服务器(查询证书状态)──→ 等待响应 ──→ 继续 TLS 握手
↑
额外网络请求,暴露域名
OCSP Stapling 流程:
服务器 ──→ CA 的 OCSP 服务器(定期预取)──→ 缓存 OCSP 响应
↓
浏览器 ──→ 服务器(TLS 握手时直接收到已装订的 OCSP 响应)
无需额外请求,隐私安全,性能更优
OCSP Stapling 的优势
- 保护用户隐私:浏览器无需向第三方 CA 发送请求,用户访问的域名不会泄露
- 提升性能:无需额外的 DNS 解析和 HTTP 请求,握手时间缩短
- 提高可用性:不依赖浏览器侧的 OCSP 查询,避免服务器不可达导致的阻塞
- 安全增强:有效防止 OCSP 缓存欺骗和中间人攻击
服务器配置建议
生产环境建议同时启用 OCSP Stapling 和 CRL/OCSP 作为双重保障。
CRL vs OCSP vs OCSP Stapling 对比
| 对比项 |
CRL |
OCSP |
OCSP Stapling |
| 机制类型 |
离线(批量下载) |
在线(实时查询) |
服务器预取(混合) |
| 实时性 |
低(有更新延迟) |
高(实时查询) |
高(定期刷新) |
| 网络请求 |
下载大文件 CRL |
每次连接查询一次 |
服务器定期获取 |
| 用户隐私 |
中(下载 CRL 暴露域名) |
差(直接暴露访问域名) |
好(无用户侧请求) |
| 性能影响 |
大(文件大,解析慢) |
中(额外连接开销) |
小(无额外延迟) |
| 可用性 |
好(本地缓存) |
依赖服务器 |
好(服务器侧保障) |
证书吊销相关的扩展
除了 CRL 和 OCSP,还有以下证书吊销相关机制:
- CRL Distribution Points(CDP):证书中指定的 CRL 下载地址
- Authority Information Access(AIA):证书中指定的 OCSP 响应器地址和中间证书下载地址
- OCSP Must-Staple:证书中声明必须携带 OCSP Stapling 响应,浏览器强制要求
- CRLite / 证书透明度(CT):新兴的批量撤销检查机制
总结
CRL 和 OCSP 是两种核心的证书吊销检查机制,前者离线批量查询,后者在线实时响应。在生产环境中,推荐同时启用 OCSP Stapling(服务器端)和 CRL/OCSP(客户端兜底)双重保障,确保在私钥泄露等紧急情况下能快速阻断不信任连接。