为什么要清单化
证书轮换是最容易出人为事故的例行操作之一:材料靠手工整理、要下发到多台机器、还要 reload 服务。把它固化成清单能明显降低疏漏率。清单覆盖五件事:材料校验(证书与私钥是否配套、链是否完整)、配置检查、灰度发布并重载、多节点复核、监控与记录更新。
清单化命令
清单化命令
# 1) 材料校验:链能否验证通过
openssl verify -untrusted chain.pem leaf.pem
# 1b) 证书与私钥是否同一密钥对:两处公钥指纹必须一致
openssl x509 -in leaf.pem -noout -pubkey | openssl sha256
openssl pkey -in key.pem -pubout | openssl sha256
# 2) 配置检查:语法不过不上线
nginx -t
# 3) 发布与复核:reload 后逐台确认实际生效的证书
for h in node1 node2; do echo | openssl s_client -connect $h:443 -servername example.com 2>/dev/null | openssl x509 -noout -dates -issuer; done清单要素
| 回滚预案 | 保留旧证书与配置备份,明确回滚命令与验证方式 |
|---|---|
| 记录项 | 序列号、指纹、生效时间、操作人、验证结果 |
| 权限与备份 | 私钥权限、备份加密与访问审计一并纳入清单 |
| 灰度顺序 | 先单节点、再小流量、最后全量,全程看错误日志 |
| 通知 | 涉及对外接口或客户端时提前告知相关方 |
上线前后检查项
| 阶段 | 检查项 | 通过标准 |
|---|---|---|
| 上线前 | 证书与私钥配套 | 两处公钥指纹一致 |
| 上线前 | 证书链完整 | verify 返回 OK |
| 上线前 | 配置语法正确 | nginx -t 通过 |
| 上线中 | 灰度重载 | 单节点先切换并观察握手是否正常 |
| 上线后 | 多节点复核 | 各节点返回的序列号与生效时间一致 |
| 上线后 | 监控与记录 | 到期告警在架,操作记录归档 |
reload 之后必须实际验证生效结果:配置写对了但服务仍加载旧证书的情况并不少见,验证要以客户端实际拿到的证书为准。
最容易被漏掉的是回滚:改前把旧证书与旧配置一起备份,并明确写下回滚命令与验证方式,出问题时才不用现场拼命令。
多节点环境要防止半更新:一部分节点换了新证书、一部分还是旧证书时,用户侧会看到间歇性失败。统一的发布时间窗加上逐台复核可以避免这类问题。