第一章 证书基础概念:X.509、PKI 与信任模型

做证书生命周期管理审计,你得先搞清楚证书到底是什么东西。我刚开始接触 PKI 的时候,被一堆术语搞得头大——X.509、CA、CRL、信任锚……说白了,数字证书就是你在网络世界里的「身份证」,而 X.509 就是这张身份证的格式标准。这一章我们把地基打牢,后面审计才能看出门道。

1.1 X.509 标准——证书的「身份证模板」

X.509 是 ITU-T 和 ISO 联合定义的一个公开密钥证书格式标准。目前最常见的是 X.509 v3 版本,引入了扩展项,比如密钥用法、基本约束、主题备用名称等。我个人习惯把证书字段分成三大块:主体信息、公钥信息和签发者信息。

下面这张表罗列了证书里最关键的几个字段,审计时你会反复跟它们打交道:

字段说明审计关注点
版本号 (Version)v1/v2/v3,目前几乎都是 v3是否使用过时版本?
序列号 (Serial Number)CA 颁发的唯一整数序列号是否重复?是否可预测?
签名算法 (Signature Algorithm)如 SHA256withRSA、ECDSA算法强度是否合规?
颁发者 (Issuer)签发该证书的 CA 的 DNDN 是否与 CA 证书匹配?
有效期 (Validity)notBefore 和 notAfter是否已过期?是否超长有效期?
主体 (Subject)证书持有者的 DN是否存在通配符滥用?
公钥 (Subject Public Key Info)算法 + 公钥值密钥长度是否足够?
扩展项 (Extensions)v3 引入,如 BasicConstraints、KeyUsageCA 标志是否正确设置?

我记得有一次审计客户的内部 CA,发现他们还在用 SHA1 签名算法。虽然系统能跑,但 SHA1 早在 2017 年就被业界宣布不再安全。你想想看,一个根 CA 用 SHA1 签发的证书链,整个信任基础都是脆的。这就是为什么要仔细检查签名算法字段。

1.2 PKI 核心组件——谁在干活?

PKI 不是单个软件,而是一套基础设施。我用一个简单的角色分工来理解它:

  • 证书颁发机构(CA)——签发和吊销证书的权威。自签名根 CA 或受信任的第三方。
  • 注册机构(RA)——负责验证申请者身份,但不能直接签发证书。我把 RA 看作「前台接待」,CA 是「制证中心」。
  • 证书吊销列表(CRL)——CA 定期发布的已吊销证书清单。审计时 CRL 的发布频率和签名有效性是硬指标。
  • 证书存储库(Repository)——存放证书和 CRL 的地方,通常用 LDAP 或 HTTP。
  • 终端实体(End Entity)——最终使用证书的用户、服务器或设备。

这里有个常见的坑:很多人以为 RA 可有可无。我曾经在一个金融项目里看到,客户直接让 CA 接受所有证书请求,结果有人冒用了 CEO 的邮箱申请了一个服务器证书。后来加了 RA 的人工审核环节,才堵住这个漏洞。

审计提示:检查 RA 和 CA 之间的身份验证机制是否足够强。如果 RA 只是发一封邮件就给 CA 发请求,那基本等于没有审核。

1.3 数字证书的四大作用

数字证书不是仅用来加密的。我习惯把它的作用归纳为四个:

  1. 身份认证——通过证书链验证对方确实是证书主体。比如你访问银行网站,浏览器会检查服务器证书是否由受信任 CA 签发。
  2. 数据加密——用证书里的公钥加密对称密钥,只有对应的私钥能解开。HTTPS 的握手阶段就是干这事。
  3. 数字签名——用私钥对数据摘要签名,对方用公钥验证签名的完整性和不可抵赖性。代码签名证书就是典型应用。
  4. 密钥协商——在 TLS 等协议中,证书携带的密钥对用于建立共享秘密。

你想想看,如果只把证书理解成「密码本」,那审计的时候很容易漏掉签名验证是否完整、证书链是否全部信任这些关键点。

1.4 信任模型——谁信谁?怎么信?

信任模型解决的核心问题是:一个终端实体证书到底该不该被信任?最常见的三种模型:

  • 层次模型(Hierarchical)——一个根 CA 签下所有下级 CA,形成树状结构。简洁、容易审计,但根 CA 一旦失陷全盘皆输。
  • 网状模型(Mesh)——多个 CA 互相交叉签名,适合组织间互信。但审计路径可能非常复杂。
  • 桥 CA 模型(Bridge CA)——设置一个中间 CA 来连接不同 PKI 域,企业合并或政府互联常见。

我画了一张层次信任模型的流程简图,后面审计证书链时会反复用到这个思路:

层次信任模型 根 CA (Trust Anchor) 中间CA 1 中间CA 2 服务器A 服务器B 客户端C 用户D 信任链:根CA → 中间CA → 终端实体,逐级签名验证

图中箭头代表签发信任关系。审计证书链时,你就是沿着这个箭头反向验证——从终端证书往上回溯,直到自签名的根证书。我曾经碰到过一个案例:中间 CA 的证书里没有设置 BasicConstraints 扩展的 CA 标志为 true,结果链断掉了,浏览器报「证书不受信任」。这种低级错误在审计中很常见。

⚠️ 特别注意:在层次模型中,根 CA 的私钥必须离线存储并定期轮换。一旦根私钥泄露,整个 PKI 都需要重建。我在某政务项目中见过根 CA 直接放在生产服务器上,当时就提了严重整改项。

好了,这一章的基础概念就讲到这里。记住 X.509 字段、PKI 组件、证书的四个作用,以及信任模型的基本结构,后面做证书生命周期审计时,你会发现自己能快速定位问题在哪一环。