证书管理:自签名、CA申请、吊销与轮换
证书管理这事儿,说白了就是给API网关发“身份证”并保证它不过期、不被冒用。我在多个网关项目里都发现,很多团队只关注证书怎么生成,却忽略了吊销和轮换——结果线上突然证书过期,整条链路全断。
嗯,这一节我们把这四块掰开揉碎了讲清楚。
自签名证书生成
自签名证书就是自己当CA。适合开发、测试环境,或者内部服务之间的互相调用。我在早期项目里就吃过亏:自签名证书没配完整信任链,客户端死活不认。
生成一个自签名证书,通常用 OpenSSL。我习惯这么写:
# 生成私钥(RSA 2048位)
openssl genrsa -out mykey.pem 2048
# 生成证书签名请求(CSR)
openssl req -new -key mykey.pem -out myreq.csr -subj "/CN=myapi.example.com"
# 自签名
openssl x509 -req -days 365 -in myreq.csr -signkey mykey.pem -out mycert.pem
注意几个坑:
- CN 必须填域名或IP,客户端校验时靠它。
- -days 别太短,我见过有人设7天,然后天天被轮换折腾。
- 自签名证书的 签发者 等于 主体,所以浏览器会弹出安全警告。
CA证书申请
生产环境必须走正规CA(证书颁发机构)。流程分两步:生成CSR,提交给CA,拿回签发的证书。
我自己常用的命令:
# 生成私钥(ECC 更轻量,推荐)
openssl ecparam -genkey -name prime256v1 -out server.key
# 生成CSR
openssl req -new -key server.key -out server.csr \
-subj "/C=CN/ST=Beijing/L=Beijing/O=MyCompany/CN=api.example.com"
然后把 server.csr 提交给CA(比如 Let's Encrypt、DigiCert)。CA会验证你对该域名的控制权(通过DNS或HTTP挑战)。
拿到CA签发的证书后,别忘了检查:
openssl x509 -in server.crt -text -noout 查看证书细节,确认签发者和有效期。我曾经被坑过一次——CA给的证书链少了一级中间CA,导致客户端握手失败。
证书吊销
证书被泄露或私钥丢失,必须立刻吊销。吊销机制主要有两种:
- CRL(证书吊销列表) — CA定期发布黑名单,客户端去下载更新。
- OCSP(在线证书状态协议) — 实时查询单个证书状态,响应更快。
为什么吊销重要?你想想看,如果攻击者拿到了你的证书私钥,他就能伪装成你的API网关。不吊销,光改密码没用。
CA一般提供吊销接口。以 Let's Encrypt 为例,用其客户端工具直接吊销:
certbot revoke --cert-path /etc/letsencrypt/live/api.example.com/cert.pem
吊销后,要立刻生成新证书并部署。同时把旧证书加入网关的黑名单——哪怕客户端信任的CA还没更新CRL,网关自己可以拒绝旧证书。
证书轮换策略
证书有有效期,到期前必须轮换。手动轮换容易出错,我建议自动化。频率上,Let's Encrypt 证书90天有效,我用cron每周检查一次。
轮换策略的核心原则:
- 提前轮换 — 在过期前至少7天完成。我习惯提前30天。
- 平滑切换 — 新证书先和旧证书并存,等所有客户端都握手成功后再下线旧证书。
- 监控告警 — 证书过期时间作为指标接入Prometheus,到期前14天发送告警。
一个简单的轮换脚本示例(基于Let's Encrypt):
#!/bin/bash
# 检查证书是否将在30天内过期
if openssl x509 -checkend $((30*24*3600)) -in /path/to/cert.pem; then
echo "证书有效,无需轮换"
else
certbot renew --quiet --deploy-hook "systemctl reload nginx"
echo "证书已更新,重载服务"
fi
嗯,这里要注意:轮换后一定要验证服务是否正常。比如用curl带证书测试:
curl --cacert /path/to/ca.pem --cert /path/to/newcert.pem --key /path/to/newkey.pem https://api.example.com/health
核心总结: 证书管理不是“生成一次就完事”。自签名用于开发,CA用于生产;吊销要在泄露时立刻执行;轮换要自动、提前、平滑。这三者配合起来才能保证API网关的加密通道始终安全可靠。
证书生命周期全景
下面我用一张图展示自签名、CA申请、吊销、轮换四步之间的关系。请注意图中箭头方向代表流程走向。
图中的虚线表示轮换完成后,新证书重新进入“部署到网关”阶段,形成一个持续循环。自签名和CA申请是两条不同的前期路径,但后续的监控、吊销、轮换逻辑是一致的。