4. 证书生命周期管理

证书这东西,说白了就是一张数字身份证。但它不是发下来就完事了——从申请到最终吊销,每一步都有坑。我参与过好几个 PKI 项目,发现很多团队只关注签发环节,结果后期运维频频出问题。嗯,今天咱们就把整个生命周期捋一遍。

核心观点:证书生命周期的管理质量,直接决定线上业务的可用性和安全性。任何一个环节的疏忽,都可能导致事故。

4.1 全流程总览

先看一张整体流程图,后面咱们再逐段拆解。

证书生命周期管理流程图 1. 证书申请 2. 身份验证 3. 证书签发 4. 安全存储 5. 使用 & 更新 6. 到期处理 7. 证书吊销 8. 归档/销毁 线上证书自动更新 密钥泄露 / 域名变更 到期前 30 天自动触发

4.2 证书申请与验证

申请环节我习惯分成两种情况:内部 PKI 和公钥 CA。内部环境通常用 CSR(Certificate Signing Request) 发起,私钥在本地生成,公钥一起打包发往 CA 服务器。公钥 CA 则需要提交域名所有权证明,比如 DNS TXT 记录或 HTTP 文件验证。

我的经验:曾经有个同事在生成 CSR 时私钥密码设得太简单,结果被暴力破解。我建议私钥密码至少 16 位,含大小写字母、数字和特殊字符。另外,CSR 中的 CN(Common Name)必须与域名完全一致,多一个空格都算不匹配。

常见申请方式对比
场景 验证方式 耗时 典型用途
内部 PKI Web 登录 / API + 审批流程 秒级 ~ 分钟级 微服务互信、内部系统认证
公共 CA (DV) DNS / HTTP 文件验证 几分钟 ~ 几小时 Web 站点 HTTPS
公共 CA (OV / EV) 组织资质 + 人工审核 1 天 ~ 1 周 电商、金融等高安全场景

4.3 证书签发

签发这一步看似简单,但有一个关键点:签名算法。我见过不少老项目还在用 SHA1 签名,说实话,这早就被浏览器标记成不安全了。你想想看,2024 年用 SHA1 的证书,所有主流客户端都会报安全警告。

避坑指南:我建议统一使用 SHA256 或更强的签名算法。另外,证书有效期也需要注意——内部 PKI 可以设为 2~3 年,但公网证书现在普遍推荐 90 天到 1 年。我曾经接手过一个项目,证书有效期写了 10 年,结果 CA 拒绝签发,改到 3 年才通过。

4.4 安全存储

证书和私钥的存储,我感觉是生命周期里最容易出乱子的环节。很多团队把证书扔在代码仓库里,或者放到共享 NFS 上。这么做非常危险——私钥一旦泄露,证书就废了。

我个人的做法是:

  1. 私钥绝不能明文落地:用 HSM(硬件安全模块) 或云厂商的 KMS(密钥管理服务) 保管。
  2. 证书文件做完整性校验:部署时计算 SHA256,跟预期比对,防止篡改。
  3. 定期换钥:即使证书没到期,私钥也可以轮换。我曾经帮一个客户做项目,他们的私钥两年没换,被拖库后黑客立刻解密了通信日志。

推荐存储方案:
· 容器环境 → Kubernetes Secret + cert-manager 自动管理
· 传统服务器 → 系统信任存储(如 /etc/ssl/certs)+ 权限 600
· 移动端 / IoT → 安全芯片或系统 Keychain

4.5 证书更新

更新分两种:主动更新和自动续期。我特别推荐你走自动续期路线,尤其是用 ACME 协议配合 Let's Encrypt 这类 CA。手动更新最大的问题是——人总会忘。我以前负责的一个内部平台,每年手动替换证书,结果有一次因为出差忘了,导致业务中断 4 小时。

# 示例:使用 certbot 自动续期(ACME 协议)
certbot renew --quiet --no-self-upgrade

# 验证续期是否成功
certbot certificates

更新策略建议:
· 生产环境证书到期前 30 天开始告警
· 到期前 7 天执行自动更新
· 更新后立即做端到端连通性测试
· 保留至少一个旧版本证书用于回滚(有效期 24 小时)

4.6 证书吊销

吊销通常是因为私钥泄露、域名不再使用、或者员工离职。嗯,这里要注意,吊销不是直接删掉证书,而是将其加入 CRL(证书吊销列表) 或发布到 OCSP(在线证书状态协议)。

吊销方式 原理 实时性 适用场景
CRL CA 定期发布黑名单文件 低(可能延迟数小时) 对外网公开证书
OCSP 客户端实时查询状态 高 高安全要求、低延迟场景
OCSP Stapling 服务端缓存 OCSP 响应并附加给客户端 极高 HTTPS 性能优化

我经历过最头疼的一次:一个内部 CA 的 CRL 更新频率设成 7 天,结果半天内就有 3 个证书被吊销,但客户端一直拿不到最新列表,导致已吊销的证书还在被信任。后来我强制把 CRL 更新间隔压到 1 小时,并且搭了 OCSP 响应器。

4.7 证书归档与销毁

证书到期或吊销后,不能随手删掉。你需要保留一段时间用于审计。我自己的经验是:

  • 电子签名证书:保留至少 5 年(法律要求)
  • 内部服务证书:保留 1 年用于事故回溯
  • 私钥:到期后立即销毁或标记为不可恢复

销毁规范:不要只执行 rm 命令,磁盘擦写可能被恢复。建议使用 shred 工具覆写多次,或者直接销毁存储介质。

好了,以上就是一个完整证书生命周期里我觉得最重要的每个节点。你在实际项目中可以根据自己的环境做微调,但整体骨架建议保持不变。