3. 证书基础:X.509证书结构、公钥与私钥、CA与证书链、证书的签发与吊销
聊到证书,很多人第一反应就是“那个在浏览器里的小锁图标”。其实它远不止这么简单。在SBOM驱动的证书生命周期管理里,证书是所有信任的起点。你连证书长什么样都不清楚,后面谈什么自动化管理?
这一节,我带你把证书的底裤扒干净。从X.509结构到公钥私钥,从CA到证书链,再到签发和吊销——全是硬货,没有废话。
3.1 X.509证书结构:一张身份证的解剖
X.509是国际电信联盟(ITU-T)定义的标准,说白了就是证书的“模板”。所有符合这个标准的证书,结构都差不多。我习惯把它比作一张身份证——有头像、有姓名、有有效期、有发证机关。
一个标准的X.509 v3证书包含以下核心字段:
| 字段 | 说明 | 类比 |
|---|---|---|
| 版本号 | 目前主流是v3(值为2) | 身份证的版本 |
| 序列号 | CA签发的唯一编号 | 身份证号码 |
| 签名算法 | 如SHA256-RSA | 防伪技术 |
| 颁发者 | 签发该证书的CA名称 | 发证机关 |
| 有效期 | notBefore 和 notAfter | 身份证有效期 |
| 主体 | 证书持有者的名称 | 你的名字 |
| 公钥 | 持有者的公钥信息 | 你的指纹 |
| 扩展 | v3新增,如SAN、密钥用法 | 附加信息 |
| 签名 | CA对上述内容的数字签名 | 钢印 |
重点:证书本身不包含私钥。它只包含公钥和持有者的身份信息。私钥是单独保管的,一旦泄露,证书就废了。
我在项目中遇到过有人把私钥和证书放在同一个文件里分发——那简直是灾难。记住,私钥永远不应该离开它生成的那台机器,除非你用了HSM或KMS。
3.2 公钥与私钥:一对天生的搭档
公钥和私钥是非对称加密的核心。你可以这样理解:
- 私钥:只有你知道的秘密。用来签名和解密。
- 公钥:所有人都可以知道的公开信息。用来验签和加密。
举个例子。我给一份SBOM清单签名,用的是我的私钥。别人拿到这份清单和我的签名,用我的公钥一验——嗯,确实是我签的,没被篡改。这就是数字签名的本质。
反过来,别人想给我发加密消息,用我的公钥加密。只有我能用私钥解密。这就是加密通信。
小技巧:生成密钥对时,我建议用RSA 2048位或ECDSA P-256。前者兼容性好,后者性能更优。别再用1024位了——那玩意儿跟纸糊的差不多。
我曾经在一个客户的系统里发现他们还在用512位的RSA密钥——那是20年前的标准。我当场就让他们下线了。你想想看,一个SBOM如果被伪造了签名,整个供应链的信任就崩塌了。
3.3 CA与证书链:信任的传递
CA(Certificate Authority)就是证书的“发证机关”。但问题来了——你怎么知道这个CA是可信的?
这就引出了证书链的概念。说白了,就是一层一层的信任传递:
- 根CA:自签名的顶级CA。所有信任的起点。它的证书预装在操作系统或浏览器里。
- 中间CA:由根CA签发,用来签发终端证书。这样做的好处是——根CA可以离线保存,安全性更高。
- 终端证书:最终用户或服务器使用的证书。由中间CA签发。
验证的时候,从终端证书开始,逐级向上找颁发者,直到找到根CA。如果根CA在信任列表里,整条链就可信。
注意:证书链不能有环。我曾经见过一个配置错误,中间CA把自己签给了自己——结果验证直接死循环。嗯,排查了整整一个下午。
下面这张图展示了典型的证书链结构:
3.4 证书的签发与吊销
证书不是凭空产生的,也不是永远有效的。签发和吊销是证书生命周期里最重要的两个操作。
3.4.1 签发流程
签发一张证书,大致分这几步:
- 生成密钥对:在客户端生成公钥和私钥。私钥自己留着,公钥发出去。
- 创建CSR:证书签名请求。里面包含公钥和身份信息。用私钥签名一下,证明你确实持有对应的私钥。
- 提交给CA:把CSR发给CA。CA会验证你的身份——比如验证域名所有权、公司资质等。
- CA签发:CA用它的私钥对你的公钥和身份信息进行签名,生成证书。
- 返回证书:你把证书部署到服务器或设备上。
关键点:CA永远不会看到你的私钥。它只处理CSR里的公钥。如果有人让你把私钥发给CA——跑,赶紧跑。
3.4.2 吊销机制
证书还没到期就不能用了?那就得吊销。常见原因包括:
- 私钥泄露(最常见)
- 证书信息变更(比如域名换了)
- 员工离职(对应的证书需要撤销)
- CA被攻破(这个就严重了)
吊销后,证书会进入CRL(证书吊销列表)或通过OCSP(在线证书状态协议)查询。客户端在验证证书时,会检查它是否被吊销。
避坑指南:我曾经遇到过一个案例——某公司吊销了证书,但没更新CRL分发点。结果所有客户端都以为证书仍然有效。嗯,那个漏洞被利用了整整两周才被发现。吊销后一定要确认CRL或OCSP能正常响应。
在SBOM场景下,证书吊销尤其重要。如果你的签名证书被吊销了,所有用那个证书签名的SBOM清单都会变成“不可信”。这就是为什么我们需要自动化的证书生命周期管理——手动吊销?太慢了,等你想起来,攻击者早就得手了。