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 证书验证流程

咱们走一遍完整的验证流程,以设备连接服务器为例:

  1. 服务器发送证书链:服务器把自己的证书 + 中间 CA 证书发给设备。
  2. 设备解析证书:设备提取服务器证书里的颁发者信息,找到中间 CA 证书。
  3. 验证签名:用中间 CA 的公钥,验证服务器证书的签名。如果通过,说明服务器证书是真的。
  4. 向上追溯:用同样的方法,用根 CA 的公钥验证中间 CA 证书的签名。
  5. 信任锚检查:检查根 CA 证书是否在设备的信任锚列表里。
  6. 其他检查:有效期、是否吊销、Key Usage 是否匹配。

全部通过,握手继续。任何一个环节失败,连接断开。

3.6 核心逻辑图

下面这张图,我画的是 PKI 信任链的核心逻辑。你仔细看,箭头方向是签发方向,验证方向正好反过来。

PKI 证书链与信任锚结构图 PKI 证书链与信任锚结构 根 CA(信任锚) 自签名,预置在设备中 中间 CA 由根 CA 签发 终端实体证书 设备/服务器证书 签发方向(蓝色实线) 根 CA → 中间 CA → 终端证书 上级为下级签名 验证方向(红色虚线) 终端证书 → 中间 CA → 根 CA 逐级验证签名,直到信任锚

3.7 实际项目中的 PKI 选型建议

做物联网设备证明,PKI 怎么搭?我直接给你几个建议:

场景 推荐方案 原因
小规模(<1000 设备) 自建根 CA + OpenSSL 成本低,灵活
中等规模 自建根 CA + 专业 CA 软件 如 EJBCA,支持自动化
大规模(>10 万设备) 云 PKI 服务 如 AWS PCA,自动伸缩
高安全场景 HSM 保护根密钥 硬件安全模块,防泄露

我的习惯:不管规模大小,根 CA 的私钥一定要离线存储。我见过有人把根密钥放在开发服务器上,结果被挖矿病毒扫到,整个 PKI 体系都得重建。根密钥离线,中间 CA 在线,这是底线。

3.8 小结

PKI 的核心,说白了就是三样东西:证书(身份证)、证书链(信任传递)、信任锚(信任起点)。

你只要记住:验证是从下往上查,签发是从上往下签。根证书是命根子,一定要保护好。