课题研究 PKI与证书信任安全 子课题03 · 第02页 / 共8页
03子课题 · CA信任链与证书供应链安全

CA信任链与证书供应链安全第02页:信任模型与证书路径验证

证书路径验证是浏览器"凭什么信任一个站点"的完整答案:从X.509 v3的每个扩展字段出发,本页逐层拆解信任链的根—中间—终端三层架构、RFC 5280路径验证算法的六个环节(附教学伪代码)、以及BasicConstraints、pathLenConstraint、EKU、名称约束等约束机制的防什么与公网部署现状——核心发现是:密码学约束手段(名称约束)在公网几乎缺位,中间CA管控实际依赖治理而非技术约束,这构成后续第3、4页的研究主线。

X.509 v3路径验证RFC 5280BasicConstraints名称约束交叉证书信任锚EKU研究状态:研究中
所属专题PKI与证书信任安全 › CA信任链与证书供应链安全
目标受众CA/电子认证服务机构运营者、PKI架构师、企业安全负责人、SOC与审计合规团队、安全研究人员
全文结构8页:总览 → 信任模型 → 中间CA管控 → 根程序治理 → 运营与供应链 → 事件档案 → 防御基线 → 治理路线

01 · X.509 v3证书结构解析

X.509 v3证书是信任链的"原子"。理解每个字段的安全语义,是理解后续所有治理机制(CT、CAA、名称约束、短寿命改革)的前提。以下按RFC 5280规范逐字段解析:

字段安全语义与治理要点
版本号(Version)v3(值2)才支持扩展字段;现代证书均为v3
序列号(Serial Number)CA签发范围内的唯一正整数;BR要求至少20位随机性以防碰撞与预映像攻击(针对MD5/SHA-1时代的设计延续)
签名算法(Signature Algorithm)证书签名所用算法标识;历史教训:MD5(Flame事件)与SHA-1均已退出CA签名实践,现行为SHA-256+RSA/ECDSA,后量子迁移(ML-DSA)在途
签发者(Issuer)/主体(Subject)X.501 distinguished name;现代Web证书主体可为空(CN留空),身份语义全部由SAN承载
有效期(Validity)notBefore/notAfter;现行BR上限398天(2020年起);Ballot SC-081v3(2025年4月通过)已启动分阶段收紧:2026年3月起200天、2027年3月起100天、2029年3月起47天——有效期是"暴露窗口"的直接度量
主体公钥(Subject Public Key Info)公钥与算法参数;私钥保护是CA运营安全的核心(HSM、密钥仪式,见第5页)
BasicConstraints最关键扩展:cA布尔位(true=可作CA签发证书)与pathLenConstraint(下级中间CA层级上限);浏览器只信任cA=true且满足路径构建要求的证书作为中间CA
KeyUsage密钥用途位图:keyCertSign(签发证书)、cRLSign(签发CRL)是CA证书的必备位
Extended Key Usage(EKU)用途细化:serverAuth/clientAuth/codeSigning/emailProtection等;中间CA的EKU可向下收缩委托范围(技术约束手段之一)
Subject Alternative Name(SAN)RFC 5280与RFC 6125承载实际身份:dNSName、URI、IP等;多域名证书与通配符证书在此扩展
Authority Key Identifier / Subject Key Identifier签发者与主体密钥标识,用于路径构建时快速匹配"子证书-父密钥"关系
Authority Information Access(AIA)指明CA证书下载地址(caIssuers)与OCSP响应器地址(OCSP)
CRL Distribution Points(CRLDP)CRL分发点;吊销体系的双支柱之一(与OCSP并存,均存在结构性局限,见子课题04)
证书策略(Certificate Policies)策略OID列表(如EV策略OID);配合CPS说明签发时所执行的身份审核等级
Signed Certificate Timestamps(SCT)CT日志返回的签名时间戳列表;Chrome/Apple自2018年起强制要求——CT合规成为公网证书的事实标准
名称约束(Name Constraints)仅存在于CA证书:限定下级可签发证书的DNS域/邮件域/目录名空间——中间CA管控的"黄金手段"(第3页详析其工程局限)

阅读提示:治理机制的演进几乎都可以在扩展字段中找到落点——CT写在SCT里、短寿命写在Validity里、CAA写在DNS里(证书外)、MPIC写在流程里(证书外)。信任链安全研究的一半工作,就是读懂这些字段背后的治理意图。

02 · 信任链三层架构

2.1 根CA:离线、自签、被信任

根CA证书是自签名的(Issuer=Subject),其可信性不来自密码学证明,而来自被人工安装进根证书库这一治理行为。为保护根私钥,行业最佳实践要求根密钥离线保存(air-gapped HSM),日常签发全部由中间CA完成——因此根证书的直接滥用案例在公网极少,但一旦失守后果是全网性的。

2.2 中间CA:日常签发的执行层,也是历史事故的高发层

中间CA连接根与终端:承担业务分域(按品牌/区域/产品线)、算法过渡(新算法中间证书)、技术受限子CA(名称约束)等职能。CCADB披露的已申报中间CA证书数量级达数千张,加上历史遗留的未申报证书,构成了Web PKI最庞大、最难审计的一层。2011—2016年间几乎所有重大信任危机都发生在中间层或其委托环节(第3页逐案分析)。

2.3 终端实体证书:站点/用户/代码的身份载体

叶子证书不具备签发能力(BasicConstraints.cA=false),其EKU限定用途(serverAuth为Web服务器)。钓鱼治理中接触最多的DV证书即属此层——它与正规证书在密码学上完全等价,区别仅在签发前的身份审核强度。

2.4 交叉证书与桥接CA

交叉证书解决两个独立信任域的互联问题:CA-A用自己的私钥为CA-B的公钥签发一张证书,使信任CA-A的用户也能验证CA-B的链。典型用途有二:①新CA冷启动——先由老牌CA交叉签名过渡(新证书链"新根交叉+自身根"双路径);②跨体系互信(历史上企业联邦、政府PKI互联曾大量使用)。美国曾建设联邦桥CA(Federal Bridge CA)连接各政府机构独立PKI,是桥接模式的公开案例。交叉证书的风险在于路径分叉:同一主体可能同时存在多条有效路径,验证结果取决于客户端实际构建的路径,增加了不可预期性——这也是现代浏览器倾向于精简交叉签名、要求CA明确披露交叉证书的原因。

2.5 真实信任链样例:Let’s Encrypt的链式演进

以Let’s Encrypt为例可直观看到交叉签名的实际形态:其ECDSA链早期同时携带两条路径——一条回溯至自有根ISRG Root X2,另一条经交叉签名回溯至广泛内置的ISRG Root X1(X1又曾由老牌根DST Root CA X3交叉签名),在新根尚未普及的过渡期兼容旧设备;DST Root CA X3于2021年9月30日到期后,通用兼容路径随之失效,Let’s Encrypt完成向纯ISRG链的切换(部分极旧Android设备因验证实现对交叉根过期时间的豁免处理,曾长期继续依赖该路径,属已公开的实现特例)。这个案例说明:交叉证书是有明确生命周期的过渡工具而非永久结构,评估信任链时必须核查每张交叉证书的到期时间与实际依赖比例。

证书路径验证算法核心流程(RFC 5280 §6 简化)
从候选路径构建到策略求值的六个环节
依据:RFC 5280第6节路径验证(path validation)算法框架简化;实现差异见各浏览器/库文档。

03 · 证书路径验证算法深度解析

RFC 5280 §6定义的验证算法以"显式信任锚列表+待验证证书+验证时间+策略要求"为输入。其关键性质:自底向上验证、逐环维护状态变量——每个中间环节都会累积"允许的名称空间""剩余路径长度""合格策略集合"等约束状态,任一环节不满足即整体失败。核心检查项伪代码如下:

路径验证核心检查项(教学伪代码,非具体实现)
for cert in path(终端证书 → 中间CA序列):
    1. 用上级CA公钥验证 cert 签名
    2. 检查 cert.notBefore ≤ 验证时间 ≤ cert.notAfter
    3. 检查吊销状态(CRL/OCSP,客户端策略决定是否强制)
    4. 非终端证书必须 BasicConstraints.cA = true
    5. pathLenConstraint 逐级递减校验(剩余层数 ≥ 0)
    6. KeyUsage 必须含 keyCertSign(CA证书)
    7. 名称链接:cert.Issuer == 上级证书.Subject
    8. 名称约束状态求值:下级SAN必须落入上级约束集
    9. EKU/策略树按客户端策略求交

3.1 实践中偏离规范的三个真实问题

  • 名称链接的"宽松匹配"历史包袱:早期实现允许Subject/Issuer字符串的宽松比较,曾导致不同密钥被误关联;现代实现按DER编码精确比较(RFC 5280要求)。
  • 吊销检查的软失败:主流浏览器对OCSP/CRL查询失败默认放行(soft-fail),吊销作为安全机制的实际效力长期受质疑(Heartbleed期间实证),这是短寿命证书改革的动因之一(子课题04详析)。
  • 路径构建的多解性:同一终端证书可能存在多条有效路径(交叉证书、AIA下载链差异),不同客户端构建结果不同——攻击面分析时必须考虑"最坏路径"。

04 · 约束机制全景对照

X.509的约束机制是"委托时的缰绳"。下表对照各机制的防什么、由谁签发、公网部署现状:

机制防止什么技术要点公网部署现状
BasicConstraints.cA普通证书冒充CA浏览器仅接受cA=true者作为中间CA;v1/v2历史证书无此扩展按策略处理强制、全覆盖(任何浏览器均执行)
pathLenConstraint中间层级无限扩张限制该CA之下允许的中间CA层数常见,但仅限制层数不限制范围
KeyUsage keyCertSign密钥越权使用签发证书专用位强制(与cA联动)
EKU限定用途越权(如服务器证书签代码)中间CA可带EKU向下收缩部分部署(技术受限CA)
名称约束(Name Constraints)中间CA为任意域名签发限定dNSName/e-mail/directoryName空间;permitted与excluded子树公网几乎未部署;罕见例外:CNNIC整改案(2015,Mozilla要求,第3页)
PolicyConstraints / inhibitAnyPolicy策略冒用要求下级显式声明策略OID或禁止anyPolicy极少使用,主要为政府/企业高保证PKI
CAA(DNS侧)未授权CA签发域名所有者声明授权CA列表;BR要求CA必须检查(属子课题06范围)快速增长,但依赖CA主动检查

为什么"黄金手段"名称约束长期缺席公网?①历史客户端兼容性风险(旧实现解析失败即拒绝,等于自我DoS);②通配符证书(*.example.com)与约束子树的匹配歧义(RFC 6125规则复杂);③国际化域名(IDNA)的等价表示问题;④CA商业利益——约束意味着上级对下级的控制,大型托管CA缺乏部署动力。结论:公网中间CA管控的现实手段主要是治理(披露+审计+退出)而非密码学约束,这正是KQ-2的核心发现。

名称约束扩展示例(仅CA证书可携带,RFC 5280 §4.2.1.10)
扩展 OID: 2.5.29.30 (nameConstraints), critical
permittedSubtrees:
  dNSName: example.com          ← 该CA只能为 *.example.com 空间签发
  dNSName: example.org
excludedSubtrees:
  dNSName: hostile.example.com  ← 显式排除子域

05 · 信任锚与交叉信任的治理

5.1 信任锚的来源与差异

同一台设备的信任锚实际由多层软件共同决定:操作系统根库(Windows/ macOS)、浏览器自带根库(Firefox使用自有NSS库,Chrome在部分平台使用Chrome Root Store)、Java/运行时自带库、以及企业MDM推送的受管根。各根库在数量与成员上存在差异——同一站点在不同客户端可能构建出不同的信任链,安全评估必须覆盖目标环境的交集。

5.2 组织侧的信任锚管理

  • 基线收敛:定期比对终端信任库与厂商基线,清理历史遗留根(尤其是已退市CA的残留);
  • 受管根的受控使用:企业代理TLS检查需要植入本地根,必须限定受管设备范围、启用审计日志并告知终端用户(合规要求见第8页);
  • 移动端的碎片化:Android 7.0+默认不信任用户安装的CA(应用需显式声明networkSecurityConfig),iOS依赖受管描述文件——移动场景的本地根滥用面较PC时代收窄,但企业侧代理场景反而扩大。

06 · 本节小结与参考来源

小结:信任链的本质是"委托的数学化"——签名算法保证传递的完整性,而委托范围的控制依赖BasicConstraints/EKU/名称约束等扩展与根程序治理的共同作用。公网的现实是:密码学约束手段(名称约束)缺位,治理手段(披露、审计、退出)承担主力——这决定了第3、4页的研究重点。

[1]

IETF RFC 5280《Internet X.509 PKI Certificate and CRL Profile》(2008年):rfc-editor.org/rfc/rfc5280——证书结构与路径验证算法(§4.2扩展、§6路径验证)的权威依据。

[2]

IETF RFC 4158《Internet X.509 PKI: Certification Path Building》(2005年):rfc-editor.org/rfc/rfc4158。

[3]

IETF RFC 6125《Representation and Verification of Domain-Based Application Service Identity within Internet Public Key Infrastructure Using X.509 (PKIX) Certificates in the Context of Transport Layer Security (TLS)》(2011年):rfc-editor.org/rfc/rfc6125。

[4]

CA/B Forum Baseline Requirements(中间CA披露与技术约束条款):cabforum.org。

[5]

CCADB公共数据库(已申报根与中间证书查询):ccadb.org。

[6]

Let’s Encrypt官方证书链文档(ISRG Root X1/X2、DST Root CA X3交叉签名及到期安排):letsencrypt.org/certificates。