2. 身份认证基础
聊远程证明,绕不开身份认证。你想想看,一个设备说「我是张三」,你怎么信它?光靠一个ID号,太容易伪造了。真正的信任,得靠一套体系来支撑——这就是PKI。
我早年做物联网安全方案时,客户总问:「为什么不能直接用对称密钥做认证?」其实可以,但规模化之后,密钥分发和管理会变成噩梦。PKI这套非对称体系,虽然重一点,但它是目前最成熟的信任模型。
PKI的核心角色
PKI不是单个技术,是一套基础设施。它包含几个关键角色:
- 证书颁发机构(CA)——信任的起点。CA负责签发和吊销证书,是整个体系的「信任锚」。
- 注册机构(RA)——CA的助手。RA负责验证申请者的身份,但不直接签发证书。我见过不少小型PKI把RA和CA合并,但生产环境建议分开。
- 证书库——存放证书和证书吊销列表(CRL)的地方。通常用LDAP或HTTP服务器。
- 终端实体——持有证书的设备或用户。在远程证明场景里,就是那个需要证明自己身份的IoT设备。
一句话总结:PKI就是一套「发身份证、查身份证、吊销身份证」的完整体系。没有它,大规模设备认证根本跑不起来。
数字证书:到底长什么样?
数字证书本质上是一个电子文件,把身份信息和公钥绑定在一起,再由CA签名担保。最常见的格式是X.509 v3。
我记得第一次手动解析证书时,被里面的字段吓了一跳——比想象中复杂得多。核心字段包括:
| 字段 | 含义 | 我的经验 |
|---|---|---|
| 版本号 | 目前主流是v3 | v1/v2已废弃,别用了 |
| 序列号 | CA分配的唯一编号 | 吊销时靠它定位证书 |
| 签名算法 | 如SHA256-RSA | 别用SHA1,已被攻破 |
| 颁发者 | 签发该证书的CA名称 | DN格式,注意大小写 |
| 有效期 | notBefore / notAfter | 设备证书建议1-2年 |
| 主体 | 证书持有者的身份 | 设备可以用序列号或MAC |
| 公钥 | 持有者的公钥信息 | ECC比RSA短,适合IoT |
| 扩展 | v3新增,如密钥用法 | 一定要限制用途 |
避坑指南:我曾经遇到一个项目,证书扩展里没设Key Usage,结果设备证书被拿去签其他证书了。嗯,从那以后我每次签发证书都会检查扩展字段。
X.509标准:证书的通用语言
X.509是国际电信联盟(ITU-T)定义的标准,规定了证书的格式和字段语义。说白了,它让不同厂商的PKI能互相理解。
v3版本最重要的改进是引入了扩展机制。扩展字段让证书不再只是「身份+公钥」的简单绑定,还能携带更多策略信息。比如:
- 基本约束——标识这个证书能不能当CA用
- 密钥用法——数字签名、密钥加密、证书签名等
- 扩展密钥用法——更细粒度,如服务器认证、客户端认证
- 主体备用名称——支持IP、DNS、URI等多种标识
在设备远程证明里,我常用主体备用名称字段存放设备的硬件唯一标识(如TPM的EK Pub哈希)。这样证书和设备就绑死了。
证书链验证:信任是怎么传递的?
这是PKI最精妙的地方。一个设备证书不是孤立存在的,它上面有一串证书:
根CA → 中间CA → 设备证书
验证过程是这样的:
- 从设备证书开始,找到它的颁发者证书(中间CA)
- 用中间CA的公钥验证设备证书的签名
- 再找到中间CA的颁发者(根CA)
- 用根CA的公钥验证中间CA的签名
- 根CA是自签名的,我们信任它(信任锚)
为什么会需要中间CA?直接根CA签设备证书不行吗?行,但不安全。根CA的私钥一旦泄露,整个体系就崩了。中间CA相当于一层缓冲,根CA可以离线保存,只在签发中间CA时才上线。
注意:证书链验证不只是验签名。还要检查有效期、吊销状态、密钥用法、基本约束等。我见过一个案例,证书链签名全对,但中间CA的Basic Constraints没设CA=true,导致验证失败。这种坑,踩过一次就记住了。
SVG:证书链验证流程
下面这张图展示了完整的证书链验证过程。我习惯把信任锚放在最上面,验证方向从下往上。
实际项目中的证书管理
理论说完了,聊聊落地。我在做设备远程证明时,遇到过几个典型问题:
- 证书存储——设备私钥必须安全存储。用TPM或安全元件,别放文件系统。我见过把私钥放Flash里的,结果固件被dump后私钥全裸奔。
- 证书轮换——证书过期前要更新。建议设备提前30天开始尝试续期,留足缓冲。
- 吊销检查——设备端不一定能实时联网查CRL。可以用OCSP Stapling,让服务器把验证结果带过来。
- 证书链大小——IoT设备内存有限。证书链太长会导致握手失败。我一般控制在3层以内,根CA+1个中间CA+设备证书。
我的习惯:在设备出厂时预置根CA证书和中间CA证书,设备证书在首次上电时通过安全通道申请。这样既保证了初始信任,又避免了预置私钥的安全风险。
小结
PKI这套体系,说复杂也复杂,说简单也简单。核心就三件事:发证书、用证书、管证书。X.509标准让不同厂商的证书能互认,证书链验证让信任可以传递。在设备远程证明里,PKI是信任的基石——没有它,后面所有的证明协议都是空中楼阁。
嗯,这一章的内容就到这里。记住一句话:信任不能凭空产生,必须有一个可信的起点。PKI就是帮你建立这个起点的工具。