证书类型详解:五张“身份证”的用途与审计要点
证书这东西,说白了就是数字世界的身份证。但身份证也分很多种,有护照、有驾照、有工作证,各自管的事不一样。我做审计最怕什么?就怕你拿着一堆证书,却搞不清哪个该放哪、哪个该盯什么。这一章我们就把最常见的五类证书掰开揉碎了讲一遍。
SSL/TLS 服务器证书
这是大家最熟的。你打开浏览器,看到小锁图标,背后就是它。它的核心使命很简单:证明你正在访问的服务器是它声称的那台,并且帮你加密通信。
密钥用途(Key Usage):digitalSignature、keyEncipherment 或 keyAgreement。
扩展密钥用途(EKU):serverAuth(1.3.6.1.5.5.7.3.1)。
serverAuth,导致服务器握手阶段直接拒绝。EKU 字段是硬开关,写错了就真不能用。
客户端证书
如果说服务器证书是门牌,那客户端证书就是钥匙。它用来证明你是某个被授权的用户或设备。常见于 VPN、API 双向认证、企业内部系统登录。
密钥用途:digitalSignature。
EKU:clientAuth(1.3.6.1.5.5.7.3.2)。
审计这个类型,我习惯先看私钥存储在哪。很多“客户端证书”其实是纯软证书,私钥直接存在用户浏览器里——这玩意一旦泄露,你能追踪到谁在用吗?
- 私钥是否强制绑定硬件(如 YubiKey、HSM)?
- 证书有效期是否设了短周期(如 6 个月以内)?
- 是否开启了 OCSP Must-Staple?
代码签名证书
代码签名证书用来给可执行文件、脚本、驱动打上“签名”,告诉系统:这代码没被篡改,发布者可信。但注意——它不是为了加密,而是为了验证完整性。
密钥用途:digitalSignature(不能包含 nonRepudiation,否则影响签名时间戳有效性)。
EKU:codeSigning(1.3.6.1.5.5.7.3.3)。
你想想看,如果代码签名证书的私钥被盗,攻击者可以签发带合法签名的恶意软件。我见过一起事故:某公司把代码签名证书放在 Jenkins 构建机器上,结果 CI 节点被入侵,私钥直接被打包带走。后来他们换了硬件签名方案,但已经造成了品牌信誉损失。
电子邮件证书(S/MIME)
电子邮件证书分两种:签名证书 和 加密证书。很多人搞混它们。签名证书只用来证明邮件是你发的,加密证书用来让别人能给你发加密邮件。
| 属性 | 签名证书 | 加密证书 |
|---|---|---|
| 密钥用途 | digitalSignature |
keyEncipherment 或 keyAgreement |
| EKU | emailProtection |
emailProtection |
| 私钥是否可导出 | 可(签名可以重签) | 严禁导出(否则加密邮件能被解密) |
| 有效期建议 | 1~3 年 | 与签名证书错开,避免同时更新 |
审计时我特别关注加密证书的私钥保护。曾经有客户把加密证书私钥放在邮件服务器上,美其名曰“方便自动解密归档邮件”。实际上这等于把房子的备用钥匙贴在门上。
CA 证书(根证书与中间证书)
CA 证书是信任链的起点。根证书自签名,中间证书由根签发。审计 CA 证书和审计普通证书完全是两个量级的事。
密钥用途:keyCertSign、cRLSign。
基本约束:CA:TRUE(路径长度限制可根据安全策略设)。
- 根证书:离线存储、多人在场才能操作、私钥通常放在 HSM 中。
- 中间证书:在线签发使用,但私钥同样不能落盘。
- CA 私钥是否在 HSM 中生成并从未离开?
- 是否有完整的密钥备份与恢复流程?
- CA 证书的 CRL 分发点和 OCSP 地址是否可达?
- 过期 CA 证书是否已从信任存储中移除?
我做过一次 CA 审计,发现根证书私钥的备份竟然以明文文件存在保险柜的 U 盘里。物理安全是做到了,但数字安全呢?保险柜能防贼,防不了内部工程师半夜去拷贝。
五类证书,五个不同的“信任锚”。你在审计时不能一把尺子量到底。服务器证书要查部署和域名绑定,客户端证书要看私钥归属和硬件绑定,代码签名证书必须检查时间戳,邮件证书要区分签名和加密的私钥策略,CA 证书则要盯着密钥全生命周期。嗯,这里每个点都值得单独开一节审计清单,后面我们会逐项落地。