证书类型详解:五张“身份证”的用途与审计要点

证书这东西,说白了就是数字世界的身份证。但身份证也分很多种,有护照、有驾照、有工作证,各自管的事不一样。我做审计最怕什么?就怕你拿着一堆证书,却搞不清哪个该放哪、哪个该盯什么。这一章我们就把最常见的五类证书掰开揉碎了讲一遍。

SSL/TLS 服务器证书

这是大家最熟的。你打开浏览器,看到小锁图标,背后就是它。它的核心使命很简单:证明你正在访问的服务器是它声称的那台,并且帮你加密通信。

密钥用途(Key Usage):digitalSignature、keyEncipherment 或 keyAgreement。
扩展密钥用途(EKU):serverAuth(1.3.6.1.5.5.7.3.1)。

个人经验:我记得有一次客户说“证书过期了但页面还能访问”,我一看,负载均衡器上挂着旧证书,后端服务器证书明明已经换了。所以审计服务器证书不光要看证书本身,还要检查哪些前端设备在终止 TLS。
避坑指南:我曾经见过有人把客户端证书的 EKU 配成 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 节点被入侵,私钥直接被打包带走。后来他们换了硬件签名方案,但已经造成了品牌信誉损失。

避坑指南:我曾经在审计中发现,某团队用的代码签名证书居然没有启用时间戳。签名一旦过期,旧版本的软件在 Windows 新系统上直接弹“未知发布者”。时间戳服务(Timestamp Authority)是必选项,别省。

电子邮件证书(S/MIME)

电子邮件证书分两种:签名证书 和 加密证书。很多人搞混它们。签名证书只用来证明邮件是你发的,加密证书用来让别人能给你发加密邮件。

属性 签名证书 加密证书
密钥用途 digitalSignature keyEncipherment 或 keyAgreement
EKU emailProtection emailProtection
私钥是否可导出 可(签名可以重签) 严禁导出(否则加密邮件能被解密)
有效期建议 1~3 年 与签名证书错开,避免同时更新

审计时我特别关注加密证书的私钥保护。曾经有客户把加密证书私钥放在邮件服务器上,美其名曰“方便自动解密归档邮件”。实际上这等于把房子的备用钥匙贴在门上。

CA 证书(根证书与中间证书)

CA 证书是信任链的起点。根证书自签名,中间证书由根签发。审计 CA 证书和审计普通证书完全是两个量级的事。

密钥用途:keyCertSign、cRLSign。
基本约束:CA:TRUE(路径长度限制可根据安全策略设)。

  • 根证书:离线存储、多人在场才能操作、私钥通常放在 HSM 中。
  • 中间证书:在线签发使用,但私钥同样不能落盘。
审计核心:
  1. CA 私钥是否在 HSM 中生成并从未离开?
  2. 是否有完整的密钥备份与恢复流程?
  3. CA 证书的 CRL 分发点和 OCSP 地址是否可达?
  4. 过期 CA 证书是否已从信任存储中移除?

我做过一次 CA 审计,发现根证书私钥的备份竟然以明文文件存在保险柜的 U 盘里。物理安全是做到了,但数字安全呢?保险柜能防贼,防不了内部工程师半夜去拷贝。

五类证书关系与审计关注点 证书生命周期审计 SSL/TLS 服务器证书 客户端证书 (用户/设备认证) 代码签名证书 (完整性验证) 电子邮件证书 (S/MIME) CA证书 (根/中间) 审计提醒 每类证书的密钥用途与 EKU 必须严格匹配实际用途 私钥保护等级:CA证书 > 代码签名/邮件加密 > 客户端 > 服务器

五类证书,五个不同的“信任锚”。你在审计时不能一把尺子量到底。服务器证书要查部署和域名绑定,客户端证书要看私钥归属和硬件绑定,代码签名证书必须检查时间戳,邮件证书要区分签名和加密的私钥策略,CA 证书则要盯着密钥全生命周期。嗯,这里每个点都值得单独开一节审计清单,后面我们会逐项落地。