4、证书生命周期管理:申请、签发、分发、使用、续期、吊销

证书跟人一样,也有自己的“一生”。从出生到退休,每个环节都马虎不得。我见过不少团队,证书一签就是三年,到期前一周才想起来续期,结果业务中断,全员加班。说白了,证书生命周期管理,就是让你提前规划好每个阶段,别等出事了再补救。

核心观点:证书生命周期 = 申请 → 签发 → 分发 → 使用 → 续期/吊销。每个环节都有坑,踩一个就够你喝一壶。

4.1 证书申请:第一步就决定了后面是否顺利

申请证书,不是填个表单就完事了。你得先搞清楚:谁要用?用在哪儿?有效期多久?

我个人习惯,申请前先列一张清单:

  • 主体信息:域名、组织名称、部门、国家/地区。千万别写错,我见过有人把公司名拼错了,结果证书签发后没法用,只能吊销重来。
  • 密钥算法:现在主流是 RSA 2048 或 ECC P-256。ECC 性能更好,但兼容性稍差。如果你面向的是老旧设备,RSA 更稳妥。
  • 用途扩展:是用于服务器认证(ServerAuth),还是客户端认证(ClientAuth),还是代码签名?这个在 CSR 里就要明确。
  • 有效期:CA/B 论坛现在要求最长不超过 398 天。别想着一次签五年了,不现实。

小技巧:生成 CSR 时,建议把私钥密码设得复杂一点。我曾经遇到过有人用 "123456" 当私钥密码,结果被内部扫描工具直接标记为高危漏洞。

4.2 证书签发:CA 到底在做什么?

你提交 CSR 后,CA 会做几件事:验证你的身份、检查 CSR 格式、然后用自己的私钥给你签名。这个过程看起来简单,但里面有个关键点——证书链的构建。

CA 签发的证书,通常不是直接由根 CA 签的,而是由中间 CA 签的。为什么?因为根 CA 的私钥太重要了,不能天天拿出来用。中间 CA 出了问题,吊销它就行,根 CA 还能继续用。

举个例子:

根 CA(离线存储,极少使用)
  └── 中间 CA1(在线签发服务器证书)
        └── 你的服务器证书
  └── 中间 CA2(在线签发客户端证书)
        └── 你的客户端证书

签发完成后,CA 会返回给你一个证书文件(通常是 PEM 格式),以及中间 CA 的证书。记得把中间 CA 证书也下载下来,后面分发时要用。

注意:有些 CA 会把中间证书和根证书一起打包发给你。但根证书其实不需要你手动部署,它应该已经在客户端的信任存储里了。你只需要部署服务器证书 + 中间证书。

4.3 证书分发:别让证书“裸奔”

证书签发下来,怎么安全地送到服务器上?这是个容易被忽视的问题。

我建议的做法:

  1. 加密传输:用 SCP、SFTP 或加密邮件发送证书文件。别用明文 HTTP 或普通邮件。
  2. 校验完整性:分发后,用 openssl x509 -in cert.pem -text -noout 检查证书内容,确认指纹和签发时一致。
  3. 私钥保护:私钥文件权限设为 600,只允许 root 或应用用户读取。我曾经见过有人把私钥放在 Web 根目录下,结果被爬虫抓走了……
  4. 集中管理:如果服务器数量多,建议用证书管理工具(如 Certbot、ACME 客户端)自动分发。手动拷贝 100 台服务器,迟早会漏掉一台。

4.4 证书使用:部署只是开始

证书部署到服务器后,你以为就完事了?不,监控才刚刚开始。

使用阶段要关注三件事:

  • 证书是否被正确加载:用浏览器或 curl 访问,确认证书链完整。我遇到过 Nginx 配置漏了中间证书,结果 Android 设备全部报错,iOS 却正常——因为 iOS 自己补全了链,Android 不会。
  • 证书是否即将过期:提前 30 天设置告警。别等到过期当天才发现。
  • 证书是否被吊销:虽然概率小,但万一 CA 出问题,你的证书也可能被连带吊销。定期检查 CRL 或 OCSP 状态。

避坑指南:我曾经帮一个客户排查问题,发现他们的证书明明没过期,但浏览器就是报错。最后查出来,是负载均衡器上只配了服务器证书,没配中间证书。客户端拿到证书链不完整,验证失败。嗯,这种问题其实很常见。

4.5 证书续期:别等到最后一刻

证书快到期了,怎么办?续期。

续期流程和首次申请差不多,但有个区别:你可以选择用原来的私钥,也可以生成新的私钥。我个人建议每次续期都生成新私钥。为什么?因为私钥用久了,泄露风险会累积。换一把新钥匙,更安全。

续期的时间点:

策略 提前续期时间 适用场景
手动续期 提前 30 天 证书数量少,有专人维护
自动续期(ACME) 提前 7 天 使用 Let's Encrypt 等自动化 CA
批量续期 提前 60 天 企业级,证书数量超过 100 张

续期完成后,记得重启 Web 服务器或应用,让新证书生效。我见过有人续期了但忘了 reload,结果还是用的旧证书……

4.6 证书吊销:CRL 和 OCSP 怎么选?

证书还没到期,但私钥泄露了、域名变更了、员工离职了——这时候就需要吊销。

吊销后,CA 会把证书序列号加入吊销列表。客户端在验证证书时,会检查这个列表。检查方式有两种:

  • CRL(证书吊销列表):CA 定期发布一个文件,里面是所有被吊销证书的序列号。客户端下载这个文件,然后本地比对。缺点是文件会越来越大,而且有延迟。
  • OCSP(在线证书状态协议):客户端实时向 CA 的 OCSP 服务器查询某个证书的状态。优点是实时,缺点是每次验证都要发起网络请求,可能影响性能。

实际项目中,我建议优先使用 OCSP Stapling。什么意思?就是服务器自己定期去 OCSP 服务器查询状态,然后把结果“钉”在 TLS 握手时发给客户端。这样客户端不用自己去查,既实时又高效。

注意:OCSP Stapling 需要 Web 服务器支持(Nginx、Apache 都行)。配置时记得把中间证书也带上,否则 OCSP 响应可能验证失败。

4.7 一张图看懂证书生命周期

下面这张图,把整个流程串起来了。你可以把它贴在工位上,每次操作前看一眼,避免漏步骤。

证书生命周期管理流程图 1. 证书申请 2. 证书签发 3. 证书分发 4. 证书使用 5a. 证书续期 5b. 证书吊销 续期后回到“使用”阶段;吊销后证书作废,需重新申请 续期后回到使用

4.8 总结一下

证书生命周期管理,说白了就是六个字:申请、签发、分发、使用、续期、吊销。每个环节都有对应的工具和最佳实践。

我个人经验是:自动化能解决 80% 的问题。用 ACME 协议自动申请和续期,用监控工具自动检查过期时间,用 OCSP Stapling 自动处理吊销状态。剩下的 20%,靠流程和文档来兜底。

嗯,证书管理这件事,做得好没人夸你,做砸了全公司找你。所以,花点时间把流程理顺,值得。