3. PKI 体系基础:公钥基础设施与数字证书
聊到设备注册和证书绑定,绕不开一个基础——PKI。说白了,PKI 就是一套让互联网上互不相识的双方能安全通信的信任机制。你想想看,设备要跟云端通信,怎么证明“我就是我”?靠的就是 PKI 这套体系。
我个人习惯把 PKI 理解成一个“数字身份证系统”。现实里我们有公安局发身份证,PKI 里则有 CA 来发数字证书。这套体系的核心,就是解决三个问题:你是谁、你的密钥是不是真的、我怎么相信你。
3.1 PKI 的核心组件
PKI 不是单个软件,而是一套完整的架构。我把它拆成几个关键角色:
- CA(证书颁发机构)——整个体系的信任锚点。CA 负责签发、吊销证书。它自己签自己的根证书,这就是信任的起点。
- RA(注册机构)——CA 的前端。RA 负责审核申请者的身份,但不直接签发证书。审核通过后,把请求转给 CA。
- 证书库——存放已签发证书和证书吊销列表(CRL)的地方。通常是 LDAP 或 HTTP 服务器。
- 终端实体——持有证书的设备、用户或服务器。它们用证书来证明身份。
核心要点:CA 是信任的根,RA 是审核的闸门。在实际项目中,RA 往往被忽略,但恰恰是 RA 的审核流程决定了整个 PKI 的安全性。
我记得有一次做车联网项目,客户直接让 CA 对外暴露注册接口,结果被恶意注册了上千个假设备证书。后来我建议他们加上 RA 层做人工+自动双重审核,才堵住这个漏洞。
3.2 证书链与信任模型
证书不是单层的。你想想看,如果所有证书都直接由根 CA 签发,根 CA 的私钥一旦泄露,整个体系就崩了。所以实际部署中,我们使用证书链。
证书链的结构是这样的:
根 CA 证书(自签名)
└── 二级 CA 证书(由根 CA 签发)
└── 三级 CA 证书(由二级 CA 签发)
└── 设备证书(由三级 CA 签发)
为什么要搞这么复杂?说白了就是分层隔离风险。根 CA 的私钥可以离线存储,平时根本不用。二级、三级 CA 负责日常签发,即使被攻破,只需要吊销中间证书,根证书不受影响。
我的经验:在物联网场景下,建议至少用三级证书链。根 CA 离线,二级 CA 做策略控制,三级 CA 做区域或产品线隔离。这样即使某个产品线的证书体系出问题,也不会波及全局。
信任模型也很关键。最常见的两种:
- 层次模型——所有证书都追溯到一个根 CA。结构清晰,但根 CA 是单点故障。
- 网状模型——多个 CA 互相交叉认证。灵活性高,但路径复杂,验证效率低。
我个人更倾向于层次模型,尤其是在设备注册场景下。设备资源有限,证书链越短,验证越快。
3.3 数字证书的结构
数字证书长什么样?最常用的是 X.509 v3 格式。我带你拆开看看里面都有什么:
| 字段 | 说明 | 我的备注 |
|---|---|---|
| 版本号 | X.509 版本,目前主流是 v3 | v3 引入了扩展字段,很重要 |
| 序列号 | CA 分配的唯一编号 | 吊销时靠这个找证书 |
| 签名算法 | CA 签名用的算法,如 SHA256-RSA | 别用 SHA1,已经不安全了 |
| 颁发者 | 签发该证书的 CA 名称 | DN 格式,比如 CN=MyCA, O=MyOrg |
| 有效期 | 起始时间和结束时间 | 设备证书建议 1-3 年 |
| 主体 | 证书持有者的名称 | 设备证书里通常是设备 ID |
| 公钥 | 持有者的公钥信息 | 算法+密钥值 |
| 扩展字段 | v3 新增,包含用途、约束等 | 设备证书必须加 Key Usage |
| 签名 | CA 对上述字段的签名 | 验证证书完整性的关键 |
避坑指南:我曾经遇到一个项目,设备证书没设置 Key Usage 扩展,结果设备证书被拿去签其他证书,造成了严重的安全事故。记住,设备证书一定要限制用途,比如只允许 digitalSignature 和 keyEncipherment。
3.4 证书的生命周期
证书不是永久的。它从生到死,有一套完整的管理流程。我把它分成六个阶段:
- 申请——设备生成密钥对,把公钥和身份信息打包成 CSR(证书签名请求),发给 RA。
- 审核——RA 验证设备身份。验证方式因场景而异,可以是预置密钥、物理身份或人工审核。
- 签发——CA 收到审核通过的请求,签发证书,返回给设备。
- 使用——设备用证书进行身份认证和通信加密。
- 更新——证书到期前,设备重新申请新证书。这个过程最好自动化。
- 吊销——设备报废、密钥泄露或设备被篡改时,CA 将证书加入 CRL 或通过 OCSP 标记为无效。
这里我特别想强调吊销。很多物联网项目只关注签发,忽略了吊销。结果设备被攻击后,证书还在有效期内,攻击者可以继续用这个证书伪装成合法设备。
我的建议:在设备注册流程中,一定要设计证书吊销检测机制。设备每次连接时,云端应该检查该证书是否被吊销。可以用 OCSP Stapling 来减少设备端的负担。
3.5 PKI 体系结构图
下面这张图展示了 PKI 的核心组件和证书生命周期流程。我习惯用这种图来跟团队对齐架构设计。
3.6 实际部署中的注意事项
讲了这么多理论,最后聊点实际的。我在多个物联网项目中部署过 PKI,有几个坑你一定要避开:
- 密钥生成位置——设备密钥对最好在设备本地生成,私钥永远不出设备。云端生成再下发的方式,私钥在传输过程中可能被截获。
- 证书存储安全——设备端的私钥要存储在安全区域,比如 TEE 或安全芯片。纯软件存储容易被提取。
- 时间同步——证书验证依赖时间。设备如果没有 RTC 或 NTP 同步,证书有效期检查会出问题。我遇到过设备时间停留在 1970 年,所有证书都被判为过期。
- CRL 大小——物联网设备数量大,CRL 会变得很大。建议使用 OCSP 或 OCSP Stapling 来替代完整的 CRL 下载。
曾经踩过的坑:有一次做智能门锁项目,设备证书有效期设了 10 年。结果第二年发现签名算法有漏洞,需要更换证书。但设备已经部署到用户家里,没法远程更新。从那以后,我坚持设备证书有效期不超过 3 年,并且一定要设计 OTA 证书更新机制。
嗯,PKI 这部分内容就到这里。理解了这个基础,后面讲设备注册流程和证书绑定时,你就能明白每一步设计背后的安全考量了。