
Let’s Encrypt 官宣:2028 年起证书有效期从 90 天减半至 45 天。这对习惯了"配置一次、忘掉一年"的开发者来说,是时候重新审视你的证书自动化流程了。
怎么回事?
2025 年 12 月 2 日,免费证书颁发机构 Let’s Encrypt 正式宣布了一个重大变更:到 2028 年,其 TLS 证书有效期将从目前的 90 天缩短至 45 天。
这不是 Let’s Encrypt 一家的决定,而是整个 CA/Browser Forum(证书颁发机构/浏览器论坛)的行业共识。苹果早在 2020 年就推动把证书有效期从两年压到一年,这次 45 天的目标只是这个趋势的延续。
1. 为什么要缩短证书有效期?
1.1 安全性
更短的证书有效期意味着:
- 密钥泄露的风险窗口更小:即使私钥被盗,攻击者可利用的时间也从 90 天压缩到 45 天
- 误签发证书的影响更短:如果 CA 不小心签发了不该签的证书,它也会更快过期
- 吊销机制的压力更小:现实中证书吊销列表(CRL)和 OCSP 的普及率堪忧,缩短有效期是另一种"强制吊销"
1.2 灵活性
更短的周期让整个互联网能更快适应:
- 新的加密算法(比如后量子密码学)
- 更安全的密钥长度
- 新的行业标准和最佳实践
想象一下,如果明天发现 RSA-2048 有重大漏洞,45 天后全网证书就能自动切换到新算法,而不是等上一年。
2. 时间线:分三步走
Let’s Encrypt 采用了分阶段、可配置的方式推进,不会一刀切。
| 时间 | 变化 | 说明 |
|---|---|---|
| 2026 年 5 月 13 日 | tlsserver profile 切换为 45 天 | 这是一个"主动加入"选项,供早期尝鲜者和需要提前适配的用户测试 |
| 2027 年 2 月 10 日 | 默认 classic profile 切换为 64 天,验证重用期缩短至 10 天 | 过渡阶段,大多数用户会在这里感受到变化 |
| 2028 年 2 月 16 日 | 全面启用 45 天证书 + 7 小时验证重用期 | 最终状态 |
什么是验证重用期?
目前,完成一次域名控制权验证后,你可以在 30 天内重复申请该域名的证书,不用再次验证。2028 年起,这个窗口会被压缩到 7 小时。
这意味着:每次续期基本都要重新验证域名所有权。
3. 对开发者的影响
3.1 自动化不是可选项,是必选项
90 天的证书周期,勉强还能人工续期(虽然不推荐)。45 天?一年要续 8 次以上,手动操作基本不现实。
如果你还在手动续期,现在是最后的上车机会。
3.2 硬编码续期间隔的会炸
很多老配置写死了"60 天续一次"之类的逻辑。45 天证书 + 60 天续期间隔 = 稳定过期。
3.3 DNS 验证用户影响更大
HTTP-01 验证相对简单,certbot 能自动处理。但 DNS-01 验证(用于通配符证书)需要动态更新 DNS 记录,如果你的 DNS 提供商不支持 API 自动化,每次续期都是噩梦。
4. 现在需要做什么?
4.1 检查你的自动续期是否正常工作
# 查看 certbot 定时器状态
systemctl list-timers | grep certbot
# 查看已有证书和到期时间
sudo certbot certificates
# 模拟续期测试
sudo certbot renew --dry-run
如果 --dry-run 报错,说明你的自动续期已经有隐患了,趁现在修。
4.2 确认续期逻辑不是硬编码
好的做法是:在证书有效期的 2/3 时续期。
对于 45 天证书,就是第 30 天左右续期。Certbot 默认是"到期前 30 天内续期",对 90 天证书来说是 60 天时触发,这个逻辑对 45 天证书也能工作(第 15 天触发),但建议检查一下你的配置:
# 查看 certbot 配置
cat /etc/letsencrypt/renewal/你的域名.conf
找 renew_before_expiry 这一行,确保它不是一个离谱的值。
4.3 启用 ACME Renewal Information (ARI)
ARI 是 Let’s Encrypt 推出的新功能,让 CA 来告诉你"该续期了",而不是你自己算时间。
# 检查 certbot 版本,建议升级到最新
certbot --version
# 升级 certbot
sudo apt update && sudo apt upgrade certbot
不同 ACME 客户端启用 ARI 的方式不同,查阅你使用的客户端文档。
4.4 设置监控告警
# 查看续期日志
journalctl -u certbot.service
# 检查证书剩余天数的脚本示例
echo | openssl s_client -connect localhost:443 -servername 你的域名 2>/dev/null \
| openssl x509 -noout -dates
建议设置告警:当证书剩余天数小于 14 天时发送通知。如果你用的是 Prometheus + Alertmanager,可以用 ssl_exporter 来监控。
4.5 确保 reload 命令正确配置
证书续期成功不代表服务生效!Nginx/Apache 需要 reload 才能加载新证书。
# 检查 certbot 的部署钩子
cat /etc/letsencrypt/renewal-hooks/deploy/reload-nginx.sh
如果没有,创建一个:
sudo mkdir -p /etc/letsencrypt/renewal-hooks/deploy
sudo tee /etc/letsencrypt/renewal-hooks/deploy/reload-nginx.sh << 'EOF'
#!/bin/bash
systemctl reload nginx
EOF
sudo chmod +x /etc/letsencrypt/renewal-hooks/deploy/reload-nginx.sh
5. 未来需要做什么?
5.1 关注 DNS-PERSIST-01 验证方式
Let’s Encrypt 正在与 CA/Browser Forum 和 IETF 合作开发一种新的验证方式:DNS-PERSIST-01。
它的核心优势是:DNS TXT 记录只需设置一次,后续续期不用再改。
目前 DNS-01 验证的痛点是每次续期都要更新 _acme-challenge.你的域名 这条 TXT 记录。如果你的 DNS 提供商不支持 API(比如某些小众服务商),或者你的 DNS 管理权限分散在多个团队,这就是个噩梦。
DNS-PERSIST-01 预计 2026 年推出,届时将大大简化通配符证书的续期流程。
5.2 考虑迁移到支持 API 的 DNS 服务商
如果你还在用不支持 API 的 DNS 服务商,现在是考虑迁移的好时机。支持 certbot DNS 插件的常见服务商:
- Cloudflare(推荐,有免费套餐)
- AWS Route 53
- Google Cloud DNS
- DigitalOcean
- Namecheap(需要额外配置)
- 阿里云(有社区插件)
# Cloudflare 示例
sudo certbot certonly \
--dns-cloudflare \
--dns-cloudflare-credentials /etc/letsencrypt/cloudflare.ini \
-d "*.你的域名.com" \
-d "你的域名.com"
5.3 评估企业级证书管理方案
如果你管理的证书数量较多(几十到上百张),可能需要考虑:
- HashiCorp Vault:可以作为中间 CA,自动签发短期证书
- cert-manager:Kubernetes 环境下的标准方案
- Keyfactor / Venafi:企业级证书生命周期管理
5.4 准备在 2026 年 5 月测试
2026 年 5 月 13 日,Let’s Encrypt 的 tlsserver profile 将率先支持 45 天证书。建议在那之后用一个测试域名试跑一下,提前发现问题。
6. 不同场景的行动清单
场景 A:单台服务器 + Certbot + Nginx
- 确认
certbot.timer在运行 - 运行
certbot renew --dry-run确认无报错 - 配置 deploy hook 自动 reload nginx
- 设置证书过期监控
场景 B:使用通配符证书 + DNS-01 验证
- 确认 DNS 服务商支持 API
- 配置 certbot DNS 插件并测试
- 关注 DNS-PERSIST-01 的进展
- 考虑是否迁移 DNS 服务商
场景 C:Kubernetes 集群
- 使用 cert-manager 管理证书
- 确认 ClusterIssuer 配置正确
- 检查 Certificate 资源的
renewBefore设置 - 监控 cert-manager 的续期事件
场景 D:CDN + 源站证书(如 Cloudflare)
- 边缘证书:Cloudflare 自动管理,不用操心
- 源站证书:确认 certbot 自动续期正常
- 确认 SSL 模式为 Full (strict)
- 续期后确认 Cloudflare 能正常连接源站
7. 常用命令速查
# === 状态检查 ===
# 查看所有证书
sudo certbot certificates
# 查看定时器
systemctl list-timers | grep certbot
# 查看续期日志
journalctl -u certbot.service --since "7 days ago"
# === 测试 ===
# 模拟续期
sudo certbot renew --dry-run
# 强制续期(不推荐日常使用)
sudo certbot renew --force-renewal
# === 诊断 ===
# 查看证书详情
echo | openssl s_client -connect 你的域名:443 2>/dev/null \
| openssl x509 -noout -text
# 查看证书有效期
echo | openssl s_client -connect 你的域名:443 2>/dev/null \
| openssl x509 -noout -dates
# 查看 Nginx 实际加载的证书配置
sudo nginx -T | grep ssl_certificate
8. 写在最后
45 天证书这件事,对于已经做好自动化的开发者来说,可能改个配置就完事了;但对于还在手动续期、或者自动化流程有隐患的团队,这是一个明确的 deadline。
好消息是:
- 时间充裕:2028 年才全面生效,还有 3 年准备
- 分阶段推进:可以在 2026 年先用测试域名适配
- 新方案在路上:DNS-PERSIST-01 会简化 DNS 验证的痛点
坏消息是:
- 拖延症患者危险:3 年听起来很长,但很多技术债就是这么攒出来的
- 验证重用期也在缩短:7 小时意味着每次续期都要重新验证
- 不止 Let’s Encrypt:其他 CA 也会跟进,整个行业都在往这个方向走
最后的建议:趁这个周末,花 30 分钟跑一下 certbot renew --dry-run,确认你的自动续期能正常工作。如果报错,现在修比 2028 年凌晨 3 点收到证书过期告警要从容得多。
参考资料:
979

被折叠的 条评论
为什么被折叠?



