课题研究 PKI与证书信任安全 子课题04 · 第02页 / 共8页
04子课题 · 证书验证机制演进(OCSP/CRL/CRLite/短寿命)

证书验证机制演进第02页:经典吊销体系:CRL与OCSP的结构性困境

CRL与OCSP是吊销体系的两块基石,也是三重结构性困境(可用性、隐私、软失败)的策源地。本页从X.509吊销语义与原因码体系(RFC 5280)出发,解析CRL的数据结构、更新窗口与“条目不可提前删除”的体积宿命,OCSP的请求-响应模型与关键工程细节(nonce、免递归验证、预签名缓存),并结合ACM IMC 2015端到端测量给出“吊销在真实Web中近乎失效”的量化证据。最终提炼出吊销体系的“不可能三角”——隐私、可用性、硬失败无法兼得——为后文的Stapling、浏览器推送与短寿命三条出路奠定问题定义。

RFC 5280RFC 6960RFC 5019CRLDelta CRLCRLDPOCSP软失败keyCompromise吊销原因码
本页定位问题定义页:机制解析 + 测量证据
关键数据Mozilla遥测:约10% OCSP请求无响应;全球约3000张CRL合计约300MB
关键文献Naylor等,ACM IMC 2015端到端测量

01 · X.509吊销语义基础

1.1 吊销在PKI信任模型中的位置

证书路径验证(RFC 5280 §6)的每一步都要回答三个问题:签名是否有效、时间是否在有效期内、证书是否被吊销。前两者是密码学与日历问题,可以由任何离线验证者独立完成;第三者却是分布式状态问题——吊销状态由CA单方面掌握,并随时间持续变化。验证者要么自己维护状态副本(CRL),要么实时查询权威(OCSP),要么依赖推送(CRLite等),要么用短寿命让问题消失。这四种策略的成本结构与信任假设完全不同,构成本课题的分析骨架。

1.2 吊销原因码(RFC 5280 §5.3.1)

CRL条目的吊销原因字段不仅用于展示,还直接影响BR §4.9.1的吊销时限要求——这是工程与合规的交汇点:

原因码代码典型场景BR吊销时限
keyCompromise1私钥泄露、私钥托管失误(如Trustico邮件外泄私钥)确认后24小时内(BR 4.9.1.1)
cACompromise2CA签名密钥泄露——信任链级事件24小时内(中间CA按BR 4.9.5为7天)*
affiliationChanged3主体从属关系变更(企业更名、业务出售)5个自然日内(BR 4.9.1.2)
superseded4被新证书替代(常规轮换)5天内
cessationOfOperation5域名停用、业务下线5天内
certificateHold6临时冻结(可removeFromCRL恢复,代码8)5天内;恢复同样须及时
privilegeWithdrawn9权限被收回(属性证书场景)5天内
aACompromise10属性权威密钥泄露24小时内

* 注:BR 4.9.1.2对“所有其他原因”规定5天;中间CA证书的吊销时限在BR 4.9.5中规定为确认问题后7天内。2025年微软超7700万张证书未在5天时限内吊销、改为2025年5—11月分周批量撤销,正是该时限的标志性压力测试(详见第6页)。

1.3 CRL的数据结构

CRL是一份由颁发CA签名的ASN.1结构(TBSCertList),核心字段包括:版本号、签名算法、颁发者名称(issuer)、本次更新时间thisUpdate、下次更新时间nextUpdate、吊销条目列表(每条含证书序列号、吊销日期、可选原因码与证书颁发者扩展),以及颁发者密钥标识符与CRL编号等扩展。两个时间字段构成CRL的“有效期窗口”——验证器只能信任窗口内的CRL,窗口过后必须重新获取;实践中大CA的CRL nextUpdate惯例为7天,小型或专用CRL可达数月。吊销条目不得提前删除(须保留至对应证书自然过期),这决定了CRL体积随吊销总量单调增长——微软2025年批量吊销7700万张证书后,相关CRL的体积增长直接冲击了CRLite等下游系统的编码预算(第4、6页)。

为何不能直接删过期条目?验证器可能基于旧的thisUpdate验证某个时间点的状态。若CA删除了“当时已吊销”的条目,持有旧CRL的验证器会得出“证书当时有效”的错误结论。因此RFC 5280要求吊销状态记录覆盖证书的整个名义有效期——这也是Delta CRL存在的动机之一:将全量列表拆为“基列表+增量”,基列表可被低频刷新,增量保持小而频。

02 · CRL的工程困境

2.1 体积:从千字节到数百兆字节

Mozilla在2025年CRLite技术博客中披露:全球公开信任CA活跃的CRL约3000张,合计约300MB,由CCADB汇总维护。任何希望“全量感知吊销”的客户端若直接订阅,将面临不可接受的带宽与存储成本——这正是CRLite以压缩过滤器重写分发范式的直接动机(第4页)。对单个组织而言,问题以另一种形式出现:内网终端若被策略强制“每次连接都拉取CRL”,首次访问的握手延迟与代理出口带宽都会被放大。

2.2 时效:7天窗口与“吊销第1天至第7天”的盲区

验证器信任的是CRL的thisUpdate–nextUpdate窗口。假设某CA的CRL每周一发布(nextUpdate为下周一),那么:周一上午发生的私钥泄露,最快也要等到下周一新CRL发布后才可能被离线验证器感知——最坏7天的传播延迟。缩短发布周期可以缓解,但每缩短一倍,分发带宽就增加一倍,而CRL条目无法提前删除的约束使体积问题无法靠“更频繁”解决。Delta CRL(RFC 5280 §5.2.4)允许基CRL低频+增量高频,但客户端实现复杂度大幅上升,实践中极少被浏览器采用。

2.3 分发失败=静默放行

与OCSP一样,CRL获取失败时主流浏览器的默认行为是放行(软失败)。这意味着:①网络中间人只要阻断CRL分发点,即可让全部离线吊销检查失效;②CA若因故障未及时发布新CRL,验证器在窗口外无法验证,同样回退放行。CRL的“离线”优势(隐私、无单点在线依赖)被“软失败”这一共同弱点抵消了大半。

实务提醒:组织在发布CRL端点(CRLDP)时,必须同时监控端点可用性与更新及时性——许多合规审计发现,CA证书中引用的CRLDP长期不可达或严重过期,但订户毫无感知,因为浏览器根本不查。该监控在短寿命时代依然是CA合规义务的一部分(BR §4.9.7要求CRL至少每7天更新,部分场景更频繁)。

03 · OCSP协议详解

3.1 请求-响应模型

OCSP(RFC 2560于1999年首发,RFC 6960于2013年更新)用一次轻量HTTP往返替代CRL全量下载。客户端构造OCSPRequest:目标证书标识(颁发者名称哈希+颁发者公钥哈希+证书序列号)、可选的扩展(如nonce)。Responder返回OCSPResponse:证书状态(good / revoked / unknown)、响应生成时间thisUpdate、下次更新前有效时间nextUpdate,以及Responder自身的签名。状态为revoked时附带吊销时间与原因码,直接映射RFC 5280的原因码体系。

3.2 关键工程细节

  • nextUpdate窗口惯例:惯例为数天量级;Let's Encrypt的OCSP响应有效期曾短至数小时级,其运营压力之大可见一斑(峰值期每周约830亿次请求经CDN承载,见第4页)。
  • Nonce扩展:请求方生成随机数要求响应方原样返回,用于防重放与响应预生成。实践中大量Responder为缓存效率忽略nonce验证,导致该扩展的保护力名存实亡。
  • Responder证书的免递归验证:RFC 6960定义了id-pkix-ocsp-nocheck扩展(OID 1.3.6.1.5.5.7.48.1.5),允许客户端跳过对Responder证书本身吊销状态的检查——否则验证会陷入“查Responder证书需要查OCSP,查OCSP需要Responder证书”的递归。这是又一个被默许的软失败。
  • 预生成与签名开销:高流量Responder通常对响应做分钟级甚至小时级预签名缓存,因此“实时性”本质上受缓存窗口约束,与CRL的更新节奏差别没有想象中大。
  • 轻量Profile:RFC 5019为高流量环境定义了OCSP轻量profile(限定哈希算法、禁止部分扩展、强制短nextUpdate等),浏览器等受信任客户端场景的技术基线。

3.3 OCSP的三大困境

困境机制成因攻击/失效场景
可用性检查依赖CA在线服务;Mozilla遥测长期观测约10%的OCSP请求得不到响应检查不可达→浏览器软失败放行;攻击者只需阻断流量即可令吊销失效,比“攻破CA”容易数个数量级
隐私每次查询向CA实时上报“某用户此刻访问某站点”的精确行为记录CA(或其日志)成为全网浏览行为的观察点;2011年DigiNotar事件已示范CA基础设施被攻破后的灾难性后果
软失败为保可用性,浏览器默认fail-open;失败原因(网络故障/攻击/CA宕机)不可区分安全机制的最终效力由最弱环节决定——“可被取消的检查等于没有检查”

04 · 端到端测量:吊销在真实Web中有多有效

4.1 IMC 2015端到端测量(Naylor等)

Naylor等人发表于ACM IMC 2015的端到端测量研究是吊销有效性领域的基准文献。其核心发现包括:

  • 浏览器检查策略高度分化:Chrome与Firefox(当时)仅对EV证书执行在线吊销检查且均软失败;Internet Explorer/Edge执行检查但同样软失败;大量场景下吊销检查完全没有发生。
  • OCSP延迟可观:OCSP检查为中位数数百毫秒量级的额外延迟(当时测量),在网络质量差的地区成为性能瓶颈并诱发更多软失败。
  • Stapling部署稀少:学术界测量显示当时部署OCSP Stapling的站点占比仅个位数百分比量级,且正确性与缓存有效性参差。
  • 结论:“检查不可达时放行”的策略使吊销体系对主动攻击几乎不设防;全面改善需要改变分发范式(推送)或改变信任窗口(短寿命),而非继续修补查询协议。

4.2 定量画像:谁在执行吊销检查

主流浏览器吊销检查策略对比(2025—2026年观测)
按“对普通服务器证书是否执行吊销检查”分档(事实梳理,非性能测量)
说明:数值为策略强度档位示意(0=不检查,3=全量硬失败),用于表达机制差异而非精确测量;依据Langley博文、Chromium源码说明、Mozilla Hacks(2025年8月)与Apple平台安全文档整理。

4.3 结构性结论

三条可复用的判断:①吊销的有效性=“CA按时吊销”ד分发及时”ד浏览器检查且硬失败”,三者是乘法关系,任何一环为零则整体为零——2014年之前该乘积对普通用户恒接近零;②CRLite把“分发”与“检查”两环同时私有化到浏览器推送管道,第一次让乘积在桌面端显著非零(87.8%覆盖率);③短寿命改革把分子改写——“需要吊销的情形”本身被快速过期吸收,是唯一能同时改善三个乘数项的路线。

05 · 小结与通往缓解的路线

经典吊销体系(CRL+OCSP)的失败不是实现质量问题,而是架构层面的不可能三角:隐私(不暴露访问行为)要求离线、可用性要求在线冗余、强安全要求硬失败——三者无法同时满足。行业由此分出两条补救路线:在协议内补救(Stapling把查询方从客户端挪到服务器,Must-Staple把软失败改为硬失败——第3页),在协议外补救(浏览器自建推送管道CRLSets/OneCRL/CRLite——第4页),以及釜底抽薪(SC-081v3短寿命——第5页)。

机制隐私可用性攻击面硬失败能力成本承担方
CRL较好(批量下载)分发点可被阻断无(软失败)CA分发+客户端存储
OCSP差(逐次上报)Responder单点无(软失败)CA在线服务(高)
Stapling好无新增(随握手)仅配合Must-Staple站点服务器
CRLSets/CRLite好(本地过滤)推送管道(浏览器控制)有(覆盖范围内)浏览器生态聚合
短寿命无关(无查询)无以过期代替吊销站点自动化体系

本节参考来源(本页)

以下均为真实可查的权威来源,用于支撑本页事实性表述。

[1]

IETF RFC 5280 §5/§6(CRL与路径验证,2008):rfc-editor.org/rfc/rfc5280;RFC 6960(OCSP):rfc-editor.org/rfc/rfc6960;RFC 5019(OCSP轻量profile):rfc-editor.org/rfc/rfc5019。

[2]

Naylor, D. et al.:《When Certificate Revocation Lists Aren't Enough: An End-to-End Measurement of Certificate Revocation in the Web's PKI》,ACM IMC 2015:conferences2.sigcomm.org/imc/2015/papers/p183.pdf。

[3]

Adam Langley:《Revocation checking and Chrome》(2011)、《Revocation still doesn't work》(2014):imperialviolet.org。

[4]

Mozilla Hacks:《CRLite: Fast, private, and comprehensive certificate revocation checking in Firefox》(2025年8月19日,含3000张CRL/300MB与遥测数据):hacks.mozilla.org。

[5]

CA/B论坛Baseline Requirements §4.9(吊销):cabforum.org;DigiCert对BR吊销时限的解读:《Industry Timelines for Certificate Revocation》:digicert.com/blog。

[6]

Let's Encrypt:《Ending OCSP Support in 2025》(2024年12月5日,含峰值请求量数据):letsencrypt.org。