4、证书颁发策略:CA分级架构设计、证书申请与签发流程、证书策略与证书实践声明

证书颁发策略,说白了就是回答三个问题:谁来发?怎么发?发了之后怎么管?

我见过不少物联网项目,一开始图省事,所有设备共用一套证书体系。结果设备量一上来,吊销一个证书要遍历整个数据库,运维直接崩溃。所以,这一章我们重点聊聊CA分级架构、申请签发流程,还有那些容易被忽略的策略声明。

4.1 CA分级架构设计

为什么一定要分级?你想想看,几百万个传感器如果都直接找根CA要证书,根CA的私钥暴露风险会急剧上升。一旦根CA被攻破,整个信任链就完了。

我个人习惯采用三级架构:根CA → 中间CA → 注册机构(RA)。根CA离线保存,中间CA负责签发,RA负责审核身份。

核心原则:根CA永远离线,中间CA按业务域拆分,RA贴近设备侧。

举个例子,我在做智能楼宇项目时,把中间CA分成了三类:

  • 设备中间CA:专门签发传感器、执行器的设备证书
  • 网关中间CA:签发边缘网关证书,策略更严格
  • 运维中间CA:签发管理平台和运维工具的证书

这样即使设备中间CA被攻破,也只影响设备域,网关和运维系统不受牵连。

CA分级架构图 根CA(离线) 自签名,物理隔离 设备中间CA 传感器/执行器 网关中间CA 边缘网关 运维中间CA 管理平台/工具 设备RA 网关RA 运维RA 温度传感器集群 边缘网关节点 运维控制台 说明:根CA离线存储,中间CA按业务域隔离,RA负责设备身份审核与证书请求转发

我的经验:中间CA的密钥最好用HSM(硬件安全模块)保护。有一次客户为了省钱把中间CA密钥放软件里,结果被挖矿病毒扫到了密钥文件...嗯,后来他们乖乖买了HSM。

4.2 证书申请与签发流程

流程设计得好,运维效率能翻倍。我一般把流程拆成四个阶段:

  1. 设备注册:设备出厂时预置唯一身份标识(如设备序列号、MAC地址)
  2. CSR生成:设备本地生成密钥对,构造证书签名请求
  3. RA审核:RA验证设备身份标识与注册信息是否匹配
  4. CA签发:中间CA签发证书,返回给设备

这里有个关键点——私钥永远不能在网络上传输。CSR里只包含公钥和身份信息,私钥必须留在设备本地。

我曾经踩过的坑:有个项目为了简化流程,让设备把私钥通过HTTPS传给服务器生成证书。结果中间人攻击直接拿到了私钥副本。从那以后,我坚持私钥绝不离设备。

下面是一个典型的CSR生成代码示例(使用OpenSSL):

# 设备本地生成密钥对
openssl genpkey -algorithm EC -pkeyopt ec_paramgen_curve:prime256v1 \
  -out /secure/device_privkey.pem

# 构造CSR,包含设备序列号
openssl req -new -key /secure/device_privkey.pem \
  -subj "/CN=SN-2024A0001/O=SmartHome/C=CN" \
  -addext "subjectAltName=DNS:sensor01.smarthome.local" \
  -out /tmp/device_csr.pem

# 将CSR发送给RA(通过安全通道)
curl -X POST https://ra.smarthome.local/csr \
  -H "Authorization: Bearer <device_token>" \
  --data-binary @/tmp/device_csr.pem

RA收到CSR后,会做以下几件事:

  • 验证设备令牌是否有效
  • 检查CSR签名是否完整
  • 核对设备序列号是否在注册列表中
  • 确认证书请求的域名或标识符是否合规

审核通过后,RA将CSR转发给中间CA。中间CA签发证书时,会附加一些关键扩展:

扩展项 用途 示例值
Key Usage 限制密钥用途 digitalSignature, keyEncipherment
Extended Key Usage 限制证书用途 clientAuth(仅客户端认证)
Subject Key Identifier 唯一标识公钥 哈希值
Authority Key Identifier 指向签发CA CA公钥哈希

我建议:物联网设备证书尽量只开clientAuth这一个用途。别图省事把serverAuth也加上,万一证书泄露,攻击者能拿它伪装服务器。

4.3 证书策略与证书实践声明

证书策略(CP)和证书实践声明(CPS)是CA运营的“宪法”。很多团队觉得这是法务的事,技术不用管。其实不然——CP和CPS直接决定了你的证书体系是否合规、是否可审计。

证书策略(CP)是一份高层次文档,描述CA签发证书的目的、适用范围和安全要求。它面向的是证书使用者和管理者。

证书实践声明(CPS)是具体操作手册,描述CA每天怎么干活。它面向的是CA运维人员。

我参与过的一个智慧城市项目,CP里明确写了:

  • 证书有效期不超过365天
  • 设备证书只能用于TLS客户端认证
  • 私钥必须存储在安全元件(SE)或TPM中
  • 吊销检查间隔不超过24小时

而对应的CPS则详细到:

  • RA审核员每天几点检查注册列表
  • CSR审核超时时间设为30秒
  • 证书吊销列表(CRL)每6小时更新一次
  • HSM的备份密钥由两人分别保管

关键区别:CP说“要做什么”,CPS说“怎么做”。CP变更需要审批委员会,CPS变更运维主管签字就行。

写CPS时,我习惯用表格把每个操作步骤列清楚:

操作项 责任人 执行频率 记录方式
CSR审核 RA审核员 实时 审计日志
证书签发 中间CA自动 按需 数据库记录
CRL发布 CA运维 每6小时 文件签名
密钥轮换 CA运维+安全官 每2年 双人签字

注意:CP和CPS不是写一次就完事的。我见过一个项目,CPS里写的CRL更新频率是1小时,实际运维改成6小时,结果审计时被开了严重不符合项。所以,文档和实际操作必须一致。

最后说一句,证书策略里一定要包含吊销策略。设备被篡改、密钥泄露、设备退役,这些场景都需要及时吊销证书。我建议在CP里明确:

  • 吊销触发条件(如:设备离线超过30天)
  • 吊销通知方式(如:通过MQTT下发吊销指令)
  • 吊销后的重新签发流程

嗯,证书颁发策略这块,核心就是架构要分层、流程要闭环、策略要落地。别想着一步到位,先跑通最小可行体系,再逐步完善。