4、证书颁发机构(CA):根CA、中间CA、终端实体证书的角色与层级
聊到证书链,很多人第一反应就是「一串证书排排队」。其实没那么简单。
我刚开始做安全启动时,也以为只要把公钥往芯片里一烧就完事了。结果第一次做产线批量签发,就遇到了证书更新问题——根证书要是坏了,整批设备都得报废。那次之后我才真正理解了CA分层的意义。
4.1 为什么需要分层?
你想想看,如果只有一个CA,它既给自己发证,又给所有设备发证。那这个CA的私钥一旦泄露,整个体系就全完了。更麻烦的是,根证书通常有很长的有效期(10年甚至20年),但设备证书可能只需要1年。怎么更新?
分层CA就是来解决这个问题的。说白了,就是「信任的传递」。
4.2 三层架构详解
我习惯把CA分成三层,每一层都有自己的角色和约束。下面这张图可以帮你快速建立整体认知:
4.3 根CA:信任的起点
根CA是整个信任链的锚点。它的证书是自签名的——也就是说,没人给它背书,它自己证明自己。
我在项目中见过最典型的错误,就是把根CA的私钥直接放在构建服务器上。嗯,这相当于把家门钥匙挂在门外。根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标志也是TRUE,但路径长度通常设为0——意思是它不能再签发下级CA,只能签发终端实体证书。
4.5 终端实体证书:最终的使用者
终端实体证书就是实际用在设备上的证书。它可以是:
- 设备身份证书: 用于安全启动时验证固件签名
- 代码签名证书: 用于给固件镜像签名
- TLS服务器证书: 用于设备与云端通信
终端实体证书的CA标志为FALSE,它不能再签发任何证书。它的有效期通常很短,1-3年比较常见。
4.6 证书链验证流程
验证证书链时,是从终端证书开始,逐级向上验证,直到信任的根证书。我画个流程你感受一下:
- 拿到终端证书,读取它的签发者信息
- 找到签发者(中间CA)的证书,用中间CA的公钥验证终端证书的签名
- 读取中间CA证书的签发者信息,找到根CA证书
- 用根CA的公钥验证中间CA证书的签名
- 根CA是自签名的,用自身的公钥验证自身的签名
- 检查所有证书的有效期、吊销状态、基本约束
这里有个容易踩的坑——路径长度约束。我曾经遇到过一个问题:中间CA的路径长度设成了1,结果它又签发了一个下级CA,导致验证失败。嗯,这种问题排查起来特别头疼,因为证书链本身是合法的,但约束条件不满足。
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是信任的桥梁,终端证书是信任的落脚点。 这三层各司其职,缺一不可。