4、证书颁发机构(CA):根CA、中间CA、终端实体证书的角色与层级

聊到证书链,很多人第一反应就是「一串证书排排队」。其实没那么简单。

我刚开始做安全启动时,也以为只要把公钥往芯片里一烧就完事了。结果第一次做产线批量签发,就遇到了证书更新问题——根证书要是坏了,整批设备都得报废。那次之后我才真正理解了CA分层的意义。

4.1 为什么需要分层?

你想想看,如果只有一个CA,它既给自己发证,又给所有设备发证。那这个CA的私钥一旦泄露,整个体系就全完了。更麻烦的是,根证书通常有很长的有效期(10年甚至20年),但设备证书可能只需要1年。怎么更新?

分层CA就是来解决这个问题的。说白了,就是「信任的传递」。

核心思想: 根CA只做一件事——签发中间CA。中间CA负责签发终端实体证书。这样根CA的私钥可以离线保存,平时根本不用碰它。

4.2 三层架构详解

我习惯把CA分成三层,每一层都有自己的角色和约束。下面这张图可以帮你快速建立整体认知:

CA三层架构与证书链关系图 CA三层架构与证书链关系 根CA (Root CA) 自签名证书 · 离线保存 · 有效期10-20年 签发 中间CA (Intermediate CA) 由根CA签发 · 可在线 · 有效期5-8年 签发 终端实体证书 设备证书 · 代码签名证书 · 有效期1-3年 证书链验证方向 1. 从终端证书开始 2. 验证签发者签名 3. 找到中间CA证书 4. 验证中间CA签名 5. 找到根CA证书 6. 验证根CA自签名 信任锚:根CA公钥 (预置在芯片中)

4.3 根CA:信任的起点

根CA是整个信任链的锚点。它的证书是自签名的——也就是说,没人给它背书,它自己证明自己。

我在项目中见过最典型的错误,就是把根CA的私钥直接放在构建服务器上。嗯,这相当于把家门钥匙挂在门外。根CA私钥一旦泄露,所有基于它的信任都会崩塌。

⚠️ 重要: 根CA私钥必须离线存储。我建议使用HSM(硬件安全模块)或加密U盘,平时锁在保险柜里。只有在签发新的中间CA时,才拿出来用一次。

根CA的几个关键特征:

  • 自签名: 证书中的签发者和主体是同一个
  • 长有效期: 通常10-20年,甚至更长
  • 严格约束: 基本约束(Basic Constraints)中CA标志为TRUE,路径长度(Path Length)通常设为1或2
  • 离线操作: 签发完中间CA后,立即下线存储

4.4 中间CA:承上启下的关键

中间CA是实际干活的那个角色。它由根CA签发,然后负责给终端设备发证书。

为什么要多这一层?我举个例子你就明白了。假设你的产品线有手机、IoT设备、车载系统三类。你可以为每一类创建一个中间CA,各自签发对应的设备证书。这样即使某个中间CA的私钥泄露,也只需要吊销这一个中间CA的证书,根CA和其他中间CA不受影响。

💡 实战建议: 我习惯为每个产品线或每个批次创建一个独立的中间CA。这样在证书吊销时,影响范围可以精确控制。曾经有个项目因为没做分层,一次私钥泄露导致整个产品线停产两周——教训深刻。

中间CA的证书里,基本约束的CA标志也是TRUE,但路径长度通常设为0——意思是它不能再签发下级CA,只能签发终端实体证书。

4.5 终端实体证书:最终的使用者

终端实体证书就是实际用在设备上的证书。它可以是:

  • 设备身份证书: 用于安全启动时验证固件签名
  • 代码签名证书: 用于给固件镜像签名
  • TLS服务器证书: 用于设备与云端通信

终端实体证书的CA标志为FALSE,它不能再签发任何证书。它的有效期通常很短,1-3年比较常见。

关键区别: 终端实体证书的密钥用途(Key Usage)通常是digitalSignature或keyEncipherment,而CA证书的密钥用途是keyCertSign和cRLSign。

4.6 证书链验证流程

验证证书链时,是从终端证书开始,逐级向上验证,直到信任的根证书。我画个流程你感受一下:

  1. 拿到终端证书,读取它的签发者信息
  2. 找到签发者(中间CA)的证书,用中间CA的公钥验证终端证书的签名
  3. 读取中间CA证书的签发者信息,找到根CA证书
  4. 用根CA的公钥验证中间CA证书的签名
  5. 根CA是自签名的,用自身的公钥验证自身的签名
  6. 检查所有证书的有效期、吊销状态、基本约束

这里有个容易踩的坑——路径长度约束。我曾经遇到过一个问题:中间CA的路径长度设成了1,结果它又签发了一个下级CA,导致验证失败。嗯,这种问题排查起来特别头疼,因为证书链本身是合法的,但约束条件不满足。

⚠️ 避坑指南: 我曾经在生成中间CA证书时,忘记设置路径长度约束。结果这个中间CA理论上可以签发任意多级CA,完全失去了分层控制的意义。所以每次签发证书,我都会用openssl x509 -text检查一遍基本约束。

4.7 实际项目中的分层策略

不同场景下,分层策略也不一样。我整理了一个表格,方便你对比:

场景 推荐层级 根CA存储方式 中间CA数量
消费类IoT设备 2层(根+终端) 离线HSM 1-2个
车载系统 3层(根+中间+终端) 离线保险柜 按车型分
工业控制系统 3层或4层 多重签名+HSM 按工厂分
手机/平板 3层 离线HSM 按产品线分

我个人建议,除非你的产品极其简单(比如一个传感器),否则至少用3层架构。多一层中间CA,就多一层安全边界。

4.8 证书链的存储与传递

在安全启动中,证书链通常以串联方式存储。比如:

终端证书
中间CA证书
根CA证书(可选,有时只存指纹)

验证时,从终端证书开始,依次向上验证。根CA的公钥通常预置在芯片的一次性可编程存储器(OTP)或eFuse中,不可更改。

💡 小技巧: 我习惯在固件中只存储终端证书和中间CA证书,根CA只存哈希值。这样即使固件被逆向,攻击者也拿不到根CA的完整证书,增加了攻击难度。

好了,CA分层的概念就讲到这里。记住一句话:根CA是信任的起点,中间CA是信任的桥梁,终端证书是信任的落脚点。 这三层各司其职,缺一不可。