3. 证书签发错误:自签名证书误用、有效期设置不当、CA选择错误
证书签发这件事,看着简单,其实坑特别多。我见过太多团队在证书签发环节翻车,轻则告警刷屏,重则设备直接离线。说白了,证书就是设备的「数字身份证」,签发环节出了错,后面所有信任关系都会崩塌。
这一章咱们就聊聊最常见的三类签发错误。嗯,都是我在项目里亲眼见过的。
3.1 自签名证书的误用
自签名证书,就是自己给自己签发的证书。它没有经过任何第三方CA的认证。很多开发团队图省事,直接在设备上用了自签名证书,结果上线就出问题。
我遇到过的一个真实案例:某智能家居项目,开发阶段所有设备都用自签名证书,测试环境一切正常。结果到了量产部署,用户手机App死活连不上设备。查了两天才发现——App只信任预置的CA根证书,根本不认设备自签的证书。最后只能紧急OTA升级固件,把自签名逻辑改成CA签发逻辑。折腾了整整两周。
什么时候可以用自签名?我个人习惯只在以下场景使用:
- 内部开发环境:本地调试、单元测试
- 封闭内网:所有设备都在同一个受控网络,且你能管理每台设备的信任存储
- 原型验证:快速验证功能,不涉及生产数据
什么时候绝对不能用?
- 面向公网的服务
- 需要与第三方系统对接的设备
- 用户手机App直连的设备
- 任何涉及支付、隐私数据的场景
3.2 证书有效期设置不当
证书有效期这个事,看似简单,但恰恰是出问题最多的。我总结了两类典型错误:有效期太长和有效期太短。
3.2.1 有效期太长
有些团队觉得「证书签发一次不容易,干脆设个10年有效期」。你想想看,这相当于给设备发了一张10年不过期的身份证。一旦私钥泄露,攻击者可以用这张证书伪装成合法设备长达10年。
| 有效期 | 风险 | 适用场景 |
|---|---|---|
| 1年以内 | 低 | 消费类IoT设备、移动App |
| 1-3年 | 中 | 工业设备、网关 |
| 3-5年 | 高 | 仅限离线设备、有物理防护 |
| 5年以上 | 极高 | 不推荐 |
3.2.2 有效期太短
反过来,有些团队为了安全,把有效期设成30天甚至7天。这在云端服务没问题,但对于IoT设备就是灾难——设备可能部署在偏远地区,网络不稳定,无法及时续期。一旦证书过期,设备直接变砖。
我记得有个项目:某水表厂商把设备证书有效期设为90天,想着「定期轮换更安全」。结果设备安装在井下,信号极差。证书到期时正好赶上雨季,连续45天无法联网续期。整个小区的远程抄表全部中断,最后只能派人挨个井盖打开手动更新。
- 设备证书:1-2年,配合自动续期机制
- 中间CA证书:5-10年,离线存储
- 根CA证书:10-20年,物理隔离保管
- 一定要设置续期提醒,提前30天触发
3.3 CA选择错误
CA(证书颁发机构)的选择,直接决定了你的证书体系是否可信。很多团队在这上面栽过跟头。
3.3.1 公共CA vs 私有CA
| 类型 | 优点 | 缺点 | 适用场景 |
|---|---|---|---|
| 公共CA | 全球信任、无需额外配置 | 费用高、签发流程慢、有年费 | 面向公网的服务、用户App |
| 私有CA | 成本低、灵活、可自定义策略 | 需要自行管理信任链 | 企业内部设备、封闭网络 |
我个人的经验:对于IoT设备,绝大多数场景应该用私有CA。原因很简单——你不可能让每台智能灯泡都去申请一个公共CA证书,成本上完全不可行。但私有CA也有坑,最常见的就是根证书保护不当。
3.3.2 CA选择的具体建议
- 面向用户的产品:使用公共CA,或者让设备预置私有CA根证书,同时支持用户手动安装
- 企业内部设备:搭建私有CA,通过MDM或配置管理分发根证书
- 混合场景:设备使用私有CA证书,云端服务使用公共CA证书,两者通过双向TLS验证
3.4 核心知识体系
下面这张图梳理了证书签发错误的完整分类和补救路径,你可以对照着检查自己的项目:
3.5 最佳实践总结
说了这么多错误,最后给几条能直接落地的最佳实践:
- 生产环境统一使用私有CA,根证书离线存储,私钥加密保护
- 设备证书有效期设为1-2年,并实现自动续期逻辑
- 建立证书吊销机制,一旦发现私钥泄露,立即吊销并重新签发
- 证书签发流程自动化,避免人工操作引入错误
- 定期审计证书状态,检查即将过期的证书,提前处理