3、双层CA架构:根CA与子CA的职责分离
说实话,我见过不少企业一开始就搞单层CA,觉得省事。结果呢?根CA一旦被攻破,整个信任体系直接崩塌。这就是为什么我强烈建议——双层CA架构,必须搞。
双层CA的核心思路很简单:根CA只做一件事——给自己签个自签名证书,然后给子CA签名。其他所有活,都交给子CA。 说白了,根CA就是个“太上皇”,平时不干活,但权力最大。
核心原则:根CA的私钥,永远不应该出现在生产网络里。永远。
3.1 根CA与子CA的职责分离
我习惯把根CA比作“保险柜里的印章”,子CA是“前台办事员”。印章不能随便拿出来用,办事员拿着印章的授权去干活就行。
具体职责划分如下:
| 角色 | 职责 | 关键约束 |
|---|---|---|
| 根CA | 自签名、签发子CA证书、维护CRL | 私钥离线存储,生命周期极长(10-20年) |
| 子CA | 签发终端实体证书(服务器、客户端、代码签名等) | 私钥在线使用,生命周期较短(3-5年) |
你想想看,如果根CA和子CA混在一起,一旦子CA被黑,攻击者就能直接拿到根CA的私钥。那整个PKI体系就废了。我在项目中遇到过一家金融客户,他们早期就是单层CA,结果运维人员误操作把根CA私钥暴露到了日志里……嗯,后面的事我就不多说了,反正他们花了三个月重建信任链。
我的建议:根CA的证书策略(CP)和认证实践声明(CPS)一定要写得比子CA更严格。根CA的CRL发布周期可以设长一些,比如半年一次,因为根CA的证书很少被吊销。
3.2 离线根CA的最佳实践
离线根CA,说白了就是一台不联网的电脑。我见过有些公司把根CA放在一个带锁的机柜里,平时连电源都不插,只有需要签发子CA时才开机。这才是正确的姿势。
具体怎么做?我总结了几条硬性规则:
- 物理隔离:根CA必须部署在独立的物理机上,不能是虚拟机。网卡可以拔掉,或者干脆不装。
- 冷存储私钥:根CA私钥生成后,立即导出到加密的USB或HSM中,然后从系统中删除。每次使用完,再次删除。
- 一次性开机:根CA的生命周期里,开机次数越少越好。我见过最极端的案例——一家银行,根CA五年只开了两次机。
- 日志审计:每次操作都要记录,包括谁、什么时间、做了什么。这些日志要单独保存,不能存在根CA机器上。
避坑指南:我曾经见过一个团队,把根CA的私钥放在U盘里,然后U盘就插在电脑上没拔下来过。这跟在线有什么区别?记住:离线不是形式,是实质。私钥必须物理上不可通过网络访问。
根CA的证书生成流程,我一般这么写:
# 1. 生成根CA私钥(在离线机器上执行)
openssl genrsa -aes256 -out rootCA.key 4096
# 2. 生成根CA自签名证书
openssl req -x509 -new -nodes -key rootCA.key \
-sha256 -days 7300 -out rootCA.crt \
-subj "/C=CN/ST=Beijing/L=Beijing/O=MyOrg/CN=My Root CA"
# 3. 将私钥导出到加密介质,然后从磁盘删除
# 注意:这一步不能省!
嗯,这里要注意:密钥长度至少4096位,哈希算法用SHA-256以上。别问我为什么,问就是NIST SP 800-57建议的。
3.3 在线子CA的部署策略
子CA是真正干活的。它需要7x24小时在线,响应证书签发请求。但子CA的私钥也不能裸奔,得用HSM或软件加密保护。
我建议的部署架构是这样的:
- 子CA服务器:部署在独立的安全区域,前后各加一道防火墙。只开放443端口用于OCSP和证书申请。
- HSM集成:子CA私钥存储在HSM中,服务器只通过PKCS#11接口调用签名操作。这样即使服务器被攻破,私钥也拿不走。
- 高可用:至少两台子CA做负载均衡,一台挂了另一台顶上。证书申请请求通过DNS轮询或硬件LB分发。
- 证书透明度(CT):子CA签发的证书,必须提交到公共CT日志。这是行业标准,不遵守的话浏览器会报错。
关键指标:子CA的证书有效期建议设为3-5年。太长了不安全,太短了运维成本高。我一般设3年,刚好和HSM的密钥轮换周期对齐。
子CA的部署流程,我习惯分三步走:
- 生成子CA密钥对:在子CA服务器上生成,私钥直接写入HSM,不留文件。
- 生成证书签名请求(CSR):将子CA的公钥和身份信息打包成CSR,通过U盘或加密邮件传给根CA管理员。
- 根CA签发子CA证书:根CA管理员在离线环境中签发证书,再通过安全通道传回子CA服务器。
你想想看,这个过程里,根CA的私钥从头到尾都没离开过离线环境。这就是双层架构的精髓。
我的经验:子CA的OCSP响应器最好单独部署,不要和CA服务器混在一起。否则一旦CA服务器挂了,OCSP也跟着挂,所有证书都验证不了。我见过一个电商平台因此宕机了4小时。
3.4 双层CA架构图
下面这张图是我自己画的双层CA架构,你可以直观地看到根CA和子CA的关系:
从这张图你可以看到,根CA和子CA之间只有一条单向的签发关系。根CA的私钥始终在离线区,子CA的私钥在HSM里。终端实体证书由子CA签发,根CA完全不参与日常运营。
再次强调:根CA和子CA之间的通信,必须通过物理介质(U盘、加密光盘)传递CSR和证书。绝对不能用网络传输。我曾经见过一个团队用邮件传CSR,结果被中间人攻击篡改了子CA的公钥……那场面,简直灾难。
好了,双层CA架构的核心要点就这些。记住:根CA离线、子CA在线、私钥分级保护,这三点做到位,你的PKI体系就稳了八成。