公钥基础设施(PKI)与证书权限

PKI 是什么?说白了,就是一个大规模分发公钥的信任体系。你想想,互联网上几亿个实体,怎么确保你拿到的公钥真的是对方本人发的?靠的就是 PKI。我管密钥平台那会儿,发现很多团队把 PKI 和 CA 划等号,其实不对。CA 只是 PKI 的一个核心组件。

4.1 几个核心角色

PKI 里最关键的角色有三个:

  • 证书颁发机构(CA)——签发证书的权威实体。
  • 注册机构(RA)——负责验证申请者身份,把结果告诉 CA。
  • 证书库(Repository)——存放证书和吊销列表(CRL)的地方,通常是 LDAP 或 HTTP。

我个人习惯把 RA 看作“风控审核”,CA 只负责“盖章”。这样职责分离,出事也好追溯。曾经有个客户把 RA 和 CA 合在一起,结果私钥泄露后连谁审核的都不知道,查了半天。

4.2 CA 的层级与信任链

CA 不是单打独斗的。根 CA(Root CA)自签证书,然后签发下级中间 CA。中间 CA 再签发终端实体证书。这条链就是证书链。

为什么非要搞多层?嗯,安全考虑。根 CA 私钥是整个信任体系的命根子,平时离线保存。中间 CA 在线签证书,就算被攻破,吊销中间 CA 就行,不用动根。我经历过一次中间 CA 私钥泄露的事故,好在我们把根 CA 扔在离线 HSM 里,影响范围小了很多。

证书链验证流程:
  1. 拿到终端证书,读取它的“签发者”字段。
  2. 找到签发该证书的 CA 证书(通常是中间 CA)。
  3. 用 CA 的公钥验证终端证书的签名。
  4. 继续往上找,直到根 CA 证书(信任锚)。
  5. 根 CA 自签,停止验证。

4.3 信任模型

公钥分发不是简单地“我发给你,你就信”。信任模型定义了“谁可以信任谁”。常见的有三种:

信任模型特点适用场景
层次模型单根 CA,所有证书都溯源到它企业内部 PKI、政府 CA
网状模型多个 CA 互相交叉认证互联网证书联盟(如 CA/B Forum)
桥 CA 模型一个桥 CA 连接不同信任域跨组织联盟可信互认

我建议别在内部搞网状模型,否则证书链验证路径爆炸。层次模型最清晰,维护成本低。

4.4 证书链完整性的坑

踩坑记录: 我曾经帮一个团队排查 HTTPS 握手失败问题。服务端只发了终端证书,没发中间 CA 证书。客户端找不到中间 CA,直接不认。后来我们在服务端配置里补上了证书链文件,搞定。

你想想看,浏览器会缓存部分根证书,但中间 CA 必须随着终端证书一起下发。很多开发者忽略这一点。

4.5 公钥分发机制

公钥分发不是靠“微信发送”。PKI 依赖证书库和在线状态协议:

  • CRL(证书吊销列表)——CA 发布的黑名单,定期拉取。
  • OCSP(在线证书状态协议)——实时查询证书是否被吊销。

我跟你说,OCSP 响应得有 CA 签名,不然攻击者可以伪造“证书有效”。我曾经见过一个系统直接跳过 OCSP 检查,认为证书有效就是安全的,结果被中间人攻击了。

4.6 整个信任体系长什么样

下面这张图展示了典型的 PKI 证书链和信任流。根 CA 在最上层,中间 CA 在中间层,终端证书在最下层。箭头代表“颁发”关系,虚线代表“信任”关系。

PKI 证书链与信任模型 根 CA 自签证书 · 离线 中间 CA 1 在线签发 中间 CA 2 在线签发 服务器证书 example.com 用户证书 alice@corp.com 代码签名证书 v1.2.3 信任锚:操作系统 / 浏览器预装根证书 验证时锚定根 CA 公钥

4.7 实际工作中的选择建议

我的经验: 如果是内部 PKI,老老实实用层次模型,根 CA 物理隔离 + HSM 保护。中间 CA 用独立的 HSM 或软件密钥,按用途分开(如 SSL CA、代码签名 CA 分开)。证书链必须完整下发,服务端配置时把中间 CA 拼接到终端证书后。

还有一点要留意——证书吊销。CRL 有延迟,OCSP 必须做签名。我见过很多企业只配了 CRL 没配 OCSP,导致证书吊销后几个小时才生效。攻击者利用这个窗口照样能搞事。

4.8 总结

公钥基础设施解决的是“公钥分发的信任问题”。CA 是信任的起点,证书链是信任的传递路径,信任锚是验证的终点。别把 CA 当成万能钥匙,权限模型和职责分离才是 PKI 安全的基础。