PKI 基础:公钥基础设施概念、数字证书结构(X.509)、证书链与信任模型
说实话,很多做嵌入式设备开发的朋友,一听到 PKI 就觉得头大。觉得那是搞 Web 安全的人才会碰的东西。但你想过没有——你的 IoT 设备要联网,要跟云端通信,怎么证明「我是我」?怎么保证中间没人偷听?
嗯,答案就在 PKI 里。这一章,我带你把它拆开揉碎。
公钥基础设施(PKI)到底是什么?
PKI 不是某个具体的软件,也不是一个协议。它是一整套规则、流程和组件的集合。说白了,就是解决「如何在不可信的网络里,安全地分发公钥」这个问题。
我刚开始做设备安全时,犯过一个低级错误:直接把公钥硬编码在固件里。结果产品量产没多久,就被爆出私钥泄露,所有设备都得召回升级。从那以后,我彻底理解了 PKI 的价值。
一个典型的 PKI 体系包含以下几个核心角色:
| 角色 | 职责 | 我见过的坑 |
|---|---|---|
| 证书颁发机构(CA) | 签发、吊销证书,是整个信任体系的根 | 根 CA 私钥没做离线存储,被黑客拖库 |
| 注册机构(RA) | 验证申请者身份,把审核结果告诉 CA | RA 审核流程形同虚设,谁都能申请到证书 |
| 证书持有者 | 持有公私钥对,用证书证明身份 | 设备私钥没做安全存储,被反编译提取 |
| 依赖方 | 验证证书的有效性,决定是否信任 | 没做证书吊销检查,信任了过期证书 |
核心要点:PKI 的本质是「信任的传递」。你不需要事先认识每一个设备,你只需要信任一个根 CA,然后由根 CA 来担保所有设备的身份。
数字证书结构:X.509 标准
数字证书就是 PKI 里的「身份证」。目前最通用的标准是 X.509 v3。我建议你把它理解成一个结构化的数据文件,里面装着一堆关键信息。
一个典型的 X.509 证书长这样:
Certificate:
Data:
Version: 3 (0x2)
Serial Number: 0x12345678
Signature Algorithm: sha256WithRSAEncryption
Issuer: C=CN, O=MyRootCA, CN=My Root CA
Validity:
Not Before: Jan 1 00:00:00 2024 GMT
Not After : Jan 1 00:00:00 2029 GMT
Subject: C=CN, O=MyDevice, CN=device-001
Subject Public Key Info:
Public Key Algorithm: rsaEncryption
RSA Public-Key: (2048 bit)
X509v3 extensions:
X509v3 Basic Constraints: CA:FALSE
X509v3 Key Usage: Digital Signature, Key Encipherment
Signature Algorithm: sha256WithRSAEncryption
Signature Value: (这里是 CA 的签名,一堆十六进制数据)
这里面有几个字段,我重点说一下:
- Issuer(颁发者):谁签发的这张证书。如果是根证书,Issuer 和 Subject 是一样的。
- Subject(主体):这张证书代表谁。在 IoT 场景里,通常是设备的唯一标识。
- Validity(有效期):证书不是永久的。我见过很多项目因为证书过期导致设备离线,排查了半天才发现是这个问题。
- Extensions(扩展):这是 v3 版本加上的,非常关键。比如
Basic Constraints标记这个证书能不能再签发下级证书,Key Usage限制这个公钥能干什么用。
我的习惯:在设备证书里,一定要把 Key Usage 设置得尽量严格。比如只允许数字签名,不允许数据加密。这样即使证书泄露,攻击者能做的事情也有限。
证书链与信任模型
你想想看,如果全世界只有一个 CA,那它一旦出问题,整个互联网都得瘫痪。所以实际部署中,我们用的是证书链。
证书链的结构,就像一棵倒过来的树:
- 根 CA:自签名证书,是整个信任链的锚点。私钥必须离线保存,平时不参与签发。
- 中间 CA:由根 CA 签发,负责实际的证书签发工作。可以有多个层级。
- 终端实体证书:由中间 CA 签发,就是设备、服务器用的证书。
验证过程是这样的:你拿到一张设备证书,先看是谁签发的。然后去找签发者的证书,再看签发者的证书是谁签发的。一直追溯到根证书。如果根证书在你的信任列表里,整条链就可信。
我曾经踩过的坑:在设备固件里只放了根证书,没放中间 CA 证书。结果设备在校验证书链时,找不到中间 CA,验证失败。后来我养成了习惯——在设备里预置完整的证书链,包括根 CA 和所有中间 CA。
常见的信任模型有三种:
| 模型 | 特点 | 适用场景 |
|---|---|---|
| 层次模型 | 严格的树状结构,根 CA 在最顶层 | 企业内部 PKI,政府 CA |
| 网状模型 | 多个 CA 互相交叉认证 | 跨组织互信,比如银行间结算 |
| 桥接模型 | 通过一个桥 CA 连接不同的 PKI 体系 | 大型企业并购后的 PKI 整合 |
对于 IoT 设备来说,我个人最推荐层次模型。结构清晰,管理方便,验证路径也短。设备端只需要存储根证书,就能验证所有由该体系签发的设备证书。
核心逻辑关系图
下面这张图,把 PKI 的核心组件和证书链的验证流程串起来了。我建议你多看几遍,理解清楚每个角色之间的关系。
避坑指南:证书链的长度不是越长越好。每多一级,验证时间就多一次网络请求和签名校验。对于资源受限的 IoT 设备,我建议最多两级:根 CA → 中间 CA → 设备证书。三级以上,设备可能扛不住。
好了,这一章的内容就这些。PKI 的概念、X.509 证书的结构、证书链的验证流程,这三块是后面所有章节的基础。你先把它们吃透,后面讲证书注入流程时,你就知道每一步在干什么了。