3. 密码学基础(下):公钥基础设施(PKI)概念,证书链,信任锚
好,咱们接着聊。上一节我们把对称加密、非对称加密和哈希算法过了一遍。这些东西单独用,其实挺脆弱的。你想想看,你拿到了一个公钥,你怎么确定这个公钥真的是你对面那个人的?
这就是 PKI 要解决的核心问题——信任的传递。说白了,就是给这个世界发身份证的系统。
3.1 什么是 PKI?
PKI,全称 Public Key Infrastructure,公钥基础设施。它不是某一个算法,也不是某一个软件,而是一整套的策略、流程、硬件和软件的组合。
我个人习惯把它理解成一个“数字世界的民政局+公证处”。它负责做三件事:
- 发证:给合法的实体(服务器、设备、人)颁发数字证书。
- 验证:让接收方能验证这个证书是不是真的、有没有过期、有没有被吊销。
- 管理:证书的更新、吊销、归档。
我在做物联网网关项目时,遇到过设备因为证书过期直接离线的情况。当时排查了半天,发现是 PKI 的证书生命周期管理没做好。嗯,这里要注意,PKI 不只是技术问题,更是管理问题。
3.2 数字证书:身份证
数字证书,最常用的标准是 X.509 v3。它长什么样?我直接给你看一个典型的证书结构:
| 字段 | 说明 | 我的经验 |
|---|---|---|
| 版本号 | 通常是 v3 (0x02) | 别用 v1/v2,扩展字段不够用 |
| 序列号 | CA 颁发的唯一编号 | 吊销时靠这个查 |
| 签名算法 | 如 sha256WithRSAEncryption | 别再用 SHA-1 了,不安全 |
| 颁发者 | 签发这个证书的 CA 名称 | DN 格式要规范 |
| 有效期 | notBefore / notAfter | 物联网设备建议 1-3 年 |
| 主体 | 证书持有者的名称 | 设备证书用设备 ID |
| 公钥 | 持有者的公钥信息 | ECC 256 位够用 |
| 扩展 | Key Usage, SAN 等 | 必须配,否则功能受限 |
核心要点:证书的本质,就是把一个公钥和一个身份绑定在一起,然后由一个大家都信任的第三方(CA)来签名担保。
3.3 证书链:信任的传递
你不可能让全世界只信任一个 CA。万一它被黑了,整个互联网都得瘫痪。所以 PKI 用了层级结构——证书链。
证书链长这样:
- 根 CA:自签名证书,信任的起点。它自己给自己签名。
- 中间 CA:由根 CA 签发,用来给下级发证。目的是隔离风险。
- 终端实体证书:由中间 CA 签发,给具体的设备或服务器用。
验证的时候,是从下往上查。你拿到一个设备证书,先看是谁签的,找到那个中间 CA 证书,再看中间 CA 是谁签的,找到根 CA 证书。根 CA 是自签名的,你本地必须信任它。这个链条就叫证书链。
我曾经在调试一个智能门锁的 TLS 握手时,发现证书链不完整。服务端只发了设备证书,没发中间 CA 证书。客户端手里只有根证书,链不上,直接报错。折腾了我一整天。
避坑指南:服务端发送证书时,一定要把完整的证书链(终端证书 + 中间 CA 证书)一起发过去,不要只发终端证书。客户端需要中间 CA 来构建信任链。
3.4 信任锚:信任的起点
信任锚,就是那个你无条件信任的根证书。它通常预装在操作系统、浏览器或者设备的固件里。
为什么叫“锚”?因为它是整个信任链的固定点。没有它,链条就飘起来了。
在物联网场景下,信任锚的管理特别重要:
- 预置:设备出厂时,把根证书烧录进安全芯片。
- 更新:根证书过期或泄露,需要 OTA 更新。这个很麻烦,所以根证书有效期通常 10-20 年。
- 固定:不要信任太多根,只信任你自己的 CA 根。否则容易被中间人攻击。
警告:千万不要在物联网设备里预置公共互联网的根证书列表(如 Mozilla 的 CA 包)。设备一旦被攻破,攻击者可以用任意公共 CA 签发的证书来伪装你的服务器。只信任你自己的根。
3.5 证书验证流程
咱们走一遍完整的验证流程,以设备连接服务器为例:
- 服务器发送证书链:服务器把自己的证书 + 中间 CA 证书发给设备。
- 设备解析证书:设备提取服务器证书里的颁发者信息,找到中间 CA 证书。
- 验证签名:用中间 CA 的公钥,验证服务器证书的签名。如果通过,说明服务器证书是真的。
- 向上追溯:用同样的方法,用根 CA 的公钥验证中间 CA 证书的签名。
- 信任锚检查:检查根 CA 证书是否在设备的信任锚列表里。
- 其他检查:有效期、是否吊销、Key Usage 是否匹配。
全部通过,握手继续。任何一个环节失败,连接断开。
3.6 核心逻辑图
下面这张图,我画的是 PKI 信任链的核心逻辑。你仔细看,箭头方向是签发方向,验证方向正好反过来。
3.7 实际项目中的 PKI 选型建议
做物联网设备证明,PKI 怎么搭?我直接给你几个建议:
| 场景 | 推荐方案 | 原因 |
|---|---|---|
| 小规模(<1000 设备) | 自建根 CA + OpenSSL | 成本低,灵活 |
| 中等规模 | 自建根 CA + 专业 CA 软件 | 如 EJBCA,支持自动化 |
| 大规模(>10 万设备) | 云 PKI 服务 | 如 AWS PCA,自动伸缩 |
| 高安全场景 | HSM 保护根密钥 | 硬件安全模块,防泄露 |
我的习惯:不管规模大小,根 CA 的私钥一定要离线存储。我见过有人把根密钥放在开发服务器上,结果被挖矿病毒扫到,整个 PKI 体系都得重建。根密钥离线,中间 CA 在线,这是底线。
3.8 小结
PKI 的核心,说白了就是三样东西:证书(身份证)、证书链(信任传递)、信任锚(信任起点)。
你只要记住:验证是从下往上查,签发是从上往下签。根证书是命根子,一定要保护好。