3. 证书生命周期:从申请到吊销的全流程

证书生命周期管理,说白了就是管好一张证书从生到死的全过程。我见过太多团队只关注证书签发那一步,结果后面分发混乱、续期遗漏、吊销不及时,最后线上事故一个接一个。今天咱们就把这六个阶段掰开揉碎了讲。

核心观点:证书生命周期不是一条直线,而是一个闭环。每个阶段都有坑,跳过任何一个都可能让你在半夜被报警电话叫醒。

证书生命周期六阶段 1. 申请 2. 签发 3. 分发 4. 使用 5. 续期 6. 吊销 续期后继续使用 密钥泄露/域名变更 关键提醒 吊销是唯一不可逆的阶段。证书一旦吊销,必须重新走申请-签发流程。

3.1 证书申请:一切从这里开始

申请阶段的核心是生成密钥对和CSR。我个人习惯把这一步叫做「信任的起点」——私钥一旦在申请阶段就埋下隐患,后面再怎么折腾也救不回来。

标准的申请流程是这样的:

  1. 生成密钥对:RSA 2048位起步,我个人建议直接用4096位。ECDSA的话,P-256是底线。
  2. 创建CSR:包含公钥、组织信息、域名列表。CN字段别乱填,它和浏览器地址栏的匹配规则很严格。
  3. 提交给CA:通过API或手动上传。企业环境里,我强烈建议走自动化,别手动。

我的习惯:申请阶段就把SAN(Subject Alternative Name)列全。我见过有人只填了CN,结果后面加域名又要重新申请,白白浪费一个证书名额。

# 生成私钥和CSR(OpenSSL示例)
openssl req -new -newkey rsa:2048 -nodes \
  -keyout server.key \
  -out server.csr \
  -subj "/C=CN/ST=Beijing/L=Beijing/O=MyCompany/CN=www.example.com" \
  -addext "subjectAltName=DNS:www.example.com,DNS:api.example.com"

3.2 证书签发:CA的信任背书

CA收到CSR后,会验证你的身份。这个过程分三种:

证书类型 验证强度 签发时间 适用场景
DV(域名验证) 低 几分钟 内部系统、测试环境
OV(组织验证) 中 1-3天 企业官网、API网关
EV(扩展验证) 高 3-7天 金融、政务等高信任场景

签发完成后,CA会返回证书文件(PEM格式)和可能的中间CA证书链。嗯,这里要注意——很多CA只给你终端证书,中间证书得自己去CA官网下载。

我曾经踩过的坑:有一次部署HTTPS,只配了终端证书,没配中间证书。结果Chrome报错「NET::ERR_CERT_AUTHORITY_INVALID」,排查了半小时才发现是证书链不完整。从那以后,我每次签发完都第一时间验证证书链完整性。

3.3 证书分发:把证书送到该去的地方

分发阶段最容易出乱子。你想想看,一个企业可能有几百台服务器、几十个微服务、一堆移动设备和IoT终端,每张证书都要准确送达。

我推荐的分发策略:

  • 集中式管理:用证书管理平台(如EJBCA、CFSSL)统一分发。别靠人肉拷贝。
  • 自动化部署:配合配置管理工具(Ansible、Puppet)自动推送到目标服务器。
  • 安全传输:私钥必须加密传输。我习惯用HSM或密钥管理服务来保护私钥。

避坑指南:分发时一定要附带完整的证书链。很多事故都是因为只发了终端证书,没发中间CA证书。我曾经帮一个客户排查问题,发现他们50台服务器里有12台证书链不完整——就是因为分发脚本写漏了。

3.4 证书使用:真正干活的时候

证书到了服务器上,就开始接受TLS握手检验了。这个阶段的核心是:证书链验证。

客户端(浏览器、API调用方)会做这几件事:

  1. 检查证书是否在有效期内
  2. 验证签名链是否完整
  3. 确认证书未被吊销(CRL/OCSP)
  4. 检查域名是否匹配

任何一个环节失败,连接就会被拒绝。我见过最诡异的情况是——证书明明没到期,但客户端就是报错。后来发现是服务器时间不同步,差了5分钟,刚好把证书「有效期」给搞乱了。

我的建议:在所有服务器上启用NTP,并且定期检查时间同步。证书验证对时间极其敏感,差几秒都可能出问题。

3.5 证书续期:别等到过期才动手

续期是生命周期里最容易被忽视的阶段。我个人的经验是:提前30天就开始续期流程。

续期有两种方式:

  • 密钥复用:用同一对密钥重新生成CSR。速度快,但安全性略低。
  • 新密钥对:重新生成密钥和CSR。更安全,我推荐这种方式。

自动化续期是企业的标配。Let's Encrypt的ACME协议就是为此而生。企业内网的话,可以用CertManager或自建CA的API实现自动续期。

# 使用certbot自动续期(Let's Encrypt)
certbot renew --deploy-hook "nginx -s reload"

我曾经翻过的车:有一次自动化续期脚本跑失败了,但监控没报警。结果证书过期那天,线上服务全部中断。从那以后,我强制要求所有证书到期前15天、7天、3天、1天各发一次告警。宁可误报,不能漏报。

3.6 证书吊销:最后的止损手段

吊销是证书生命周期里唯一不可逆的操作。一旦吊销,这张证书就彻底废了。

什么情况下需要吊销?

  • 私钥泄露(最常见)
  • 域名所有权变更
  • 员工离职(特别是管理员)
  • 证书信息错误

吊销后,CA会更新CRL(证书吊销列表)或OCSP响应。客户端在验证证书时会检查吊销状态。

吊销方式 实时性 缺点
CRL(证书吊销列表) 低(有更新周期) 列表越来越大,下载慢
OCSP(在线证书状态协议) 高(实时查询) OCSP响应器可能成为单点故障
OCSP Stapling 高(由服务器主动提供) 配置复杂,但最推荐

核心原则:吊销不是惩罚,是保护。私钥泄露后,越早吊销损失越小。我见过有人犹豫要不要吊销,结果被攻击者利用泄露的证书伪造了身份,造成了更大的损失。

好了,证书生命周期的六个阶段就讲完了。每个阶段都有它的技术细节和坑,后面几章我们会逐个深入。记住一句话:证书管理不是一次性工作,而是一个持续运营的过程。