4. 工业设备证书类型与层级设计
在工业物联网场景中,设备身份与信任关系不是靠单一证书就能覆盖的。一台现场PLC、一个边缘网关、一台云端服务器、一段固件代码,它们各自需要不同用途的证书,而这些证书又必须通过一条清晰的层级关系串联起来,才能形成可验证、可撤销、可扩展的信任链。本节围绕五类核心证书——设备身份证书、网关证书、服务器证书、代码签名证书、根证书与中间证书——讨论它们的分工、层级规划与信任链构建方法。
五类证书的职责边界
先明确每类证书“证明什么、给谁用、放在哪里”。
- 设备身份证书:绑定单台设备的唯一身份,通常以设备序列号或资产编号作为CN/SAN,用于设备与网关、设备与服务器之间的双向TLS认证。它是设备“我是谁”的凭证,私钥应存放在TPM、安全芯片或受保护的密钥区,不可导出。
- 网关证书:代表边缘网关这一汇聚节点,用于网关与云端、网关与下挂设备之间的认证。网关往往承担协议转换与代理角色,其证书需要支持较长的有效期和较高的并发连接数。
- 服务器证书:部署在云端或本地服务器,用于服务端身份证明,客户端(设备或网关)通过它验证“我连的是不是真的平台”。通常需要绑定域名,并支持SAN多域名。
- 代码签名证书:用于对固件、配置文件、脚本进行数字签名,设备在升级前验证签名,确保代码来源可信、内容未被篡改。它与设备身份证书的关键区别在于:前者签“代码”,后者签“设备”。
- 根证书与中间证书:根证书是整个信任体系的锚点,离线保存、有效期最长;中间证书由根证书签发,用于日常签发各类终端证书,从而避免根私钥频繁使用。
层级规划:为什么不能“根证书直接签设备”
很多初期项目图省事,用一张根证书直接签发所有设备证书。这在设备数量少时可行,但一旦规模上千、需要分区域或分批次吊销,就会暴露问题:根私钥必须在线、吊销粒度粗、不同业务线无法隔离。合理的做法是引入中间层,按用途或区域划分签发分支。
一个可落地的三层结构如下:
- 根CA(离线):有效期20年,私钥离线保存,仅用于签发中间CA证书和根自签名。
- 中间CA(按用途划分):例如“设备身份中间CA”“网关中间CA”“服务器中间CA”“代码签名中间CA”,有效期5~10年。每个中间CA只签发一类终端证书,职责单一。
- 终端证书:设备身份证书、网关证书、服务器证书、代码签名证书,有效期根据场景设定,设备证书通常1~3年,代码签名证书可更短。
这样划分后,吊销某类设备只需吊销对应中间CA或该CA下的终端证书,不会影响其他业务线。同时,根私钥可以长期离线,降低泄露风险。
信任链构建与验证路径
信任链的本质是:验证方从终端证书出发,逐级向上验证签名,直到命中本地信任的根证书。以设备接入网关为例,设备持有设备身份证书,网关持有网关证书,双方需要验证对方证书是否由可信CA签发。
验证路径为:设备身份证书 → 设备身份中间CA → 根CA;网关证书 → 网关中间CA → 根CA。双方在TLS握手时交换证书链,各自用本地信任库中的根证书验证对方链的完整性。如果中间CA证书缺失,验证会失败,因此设备端和网关端都必须携带完整的证书链(终端证书 + 中间CA证书),根证书则预置在信任库中,不随链传输。
下面用一张层级与信任链示意图,把五类证书、两级CA以及验证方向放在同一视图中。
实际规划中的参数与操作要点
层级确定后,落地时还需要关注几个关键参数和操作细节。
有效期设计:根CA建议20年,中间CA 5~10年,设备身份证书1~3年,网关证书2~3年,服务器证书1年(配合自动续期),代码签名证书1年。设备证书有效期不宜过长,否则吊销列表会膨胀;也不宜过短,否则现场设备频繁续期不现实。可采用“短有效期 + 自动续期”策略,设备在证书到期前30天自动向注册服务申请新证书。
密钥算法与长度:工业设备资源受限,推荐ECC P-256,兼顾安全与性能;服务器和代码签名可使用RSA 2048或ECC P-384。哈希算法统一使用SHA-256,避免SHA-1。
证书链携带:设备端在TLS握手时发送“设备身份证书 + 设备身份中间CA证书”,网关端发送“网关证书 + 网关中间CA证书”。根证书不发送,由双方信任库预置。如果中间CA证书缺失,对方无法构建完整链,握手会失败。
吊销机制:小规模可用CRL,大规模建议OCSP或OCSP Stapling。设备端应支持缓存OCSP响应,避免每次连接都查询。对于离线设备,可在网关侧做代理验证,网关定期同步CRL/OCSP状态。
代码签名与设备身份的分离:代码签名证书不应与设备身份证书混用。设备身份证书证明“这台设备是谁”,代码签名证书证明“这段代码来自可信发布者”。固件升级时,设备先用代码签名证书验证固件签名,再用设备身份证书与服务器建立安全通道下载固件,两者职责不同,必须分开签发。
- 根CA是否离线保存,私钥是否从未导出?
- 中间CA是否按用途(设备/网关/服务器/代码签名)分离?
- 设备身份证书CN是否使用唯一序列号,私钥是否存于安全硬件?
- 证书链是否包含中间CA证书,根证书是否预置信任库?
- 吊销策略是否覆盖离线设备场景?
- 代码签名证书是否与设备身份证书分开签发?
信任链构建完成后,可以用一个简单验证判断是否成功:在网关侧用openssl verify -CAfile root.crt -untrusted intermediate.crt device.crt验证设备证书链,若返回OK,说明链完整且签名有效;若返回unable to get local issuer certificate,则说明中间CA证书缺失或根证书未预置。实际部署中,建议在设备出厂前完成证书注入和链验证,避免现场调试时才发现信任链断裂。