CA/Browser Forum 于 2025 年 4 月通过了一项影响深远的决议:SSL/TLS 证书有效期将分阶段大幅缩短。2026 年 3 月起降至 200 天,2027 年 3 月降至 100 天,2029 年 3 月进一步缩至 47 天。域名验证信息复用期也将同步缩短到约 10 天。
这意味着手动管理证书续期将完全不可持续。本文基于亚马逊云科技 EC2 + Nginx 的实际环境,深入探讨 ACME 协议的工作机制以及 Certbot 三种续期模式的技术细节。
ACME(Automatic Certificate Management Environment)是 IETF 标准协议(RFC 8555),定义了证书自动签发和管理的完整流程。核心验证方式包括:
- HTTP-01:在 Web 服务器上放置验证文件
- DNS-01:添加 TXT DNS 记录
- TLS-ALPN-01:通过 TLS 握手验证
Certbot 是使用范围较广的 ACME 客户端,支持 Let's Encrypt 和 DigiCert 等多个 CA。
基础组件安装(Amazon Linux 2023):
sudo dnf install nginx -y sudo systemctl enable nginx && sudo systemctl start nginx sudo pip3 install certbot certbot-nginx
Nginx 配置验证:
sudo nginx -t sudo systemctl reload nginx
Certbot 在本地 80 端口启动临时 HTTP 服务器响应 HTTP-01 challenge。需要先释放 80 端口:
sudo systemctl stop nginx sudo certbot certonly --standalone -d yourdomain.com sudo systemctl start nginx
自动续期需配置钩子:
sudo certbot renew --dry-run --pre-hook "systemctl stop nginx" --post-hook "systemctl start nginx"
钩子信息保存在 /etc/letsencrypt/renewal/yourdomain.com.conf 中。
Certbot 将验证文件写入 Nginx 文档根目录,Nginx 直接提供静态文件响应 challenge。
关键配置——在 301 重定向之前设置 ACME 路径例外:
server {
listen 80;
server_name yourdomain.com;
location /.well-known/acme-challenge/ {
root /usr/share/nginx/html;
}
location / {
return 301 https://$host$request_uri;
}
}
验证路径可达性:
sudo mkdir -p /usr/share/nginx/html/.well-known/acme-challenge
echo "test" | sudo tee /usr/share/nginx/html/.well-known/acme-challenge/test-token
curl -I http://yourdomain.com/.well-known/acme-challenge/test-token
# 期望返回 HTTP 200,而非 301
签发证书:
sudo certbot certonly --webroot -w /usr/share/nginx/html -d yourdomain.com
建议添加 deploy 钩子自动 reload:
#!/bin/bash # /etc/letsencrypt/renewal-hooks/deploy/reload-nginx.sh systemctl reload nginx
Certbot 直接与 Nginx 进程通信,临时修改配置处理 challenge,完成后自动安装证书和 SSL 指令并 reload:
sudo certbot --nginx -d yourdomain.com
续期配置中 authenticator = nginx, installer = nginx,无需额外钩子。
# 检查是否已有定时任务 sudo systemctl list-timers | grep certbot
手动创建 cron
echo “0 3,15 * * * root certbot renew –quiet” | sudo tee /etc/cron.d/certbot
Certbot 默认在证书到期前 30 天触发实际续期。每天运行两次确保不会错过窗口。
DigiCert CertCentral 支持 ACME 协议,通过外部账户绑定(EAB)认证:
# 注册 sudo certbot register --server "https://acme.digicert.com/v2/acme/directory/" --eab-kid "YOUR_EAB_KID" --eab-hmac-key "YOUR_EAB_HMAC_KEY" --email --agree-tos # 获取证书(三种模式均可) sudo certbot --nginx --server "https://acme.digicert.com/v2/acme/directory/" -d yourdomain.com
续期流程与 Let's Encrypt 一致,Certbot 在 renewal 配置中保存 ACME 服务器地址。
- 用 CloudWatch 自定义指标监控证书到期时间
- 配置 SNS 告警:到期前 14 天通知
- 定期检查 Certbot 日志:
/var/log/letsencrypt/letsencrypt.log
证书有效期缩短是大势所趋。亚马逊云科技用户的两个选择:
- 托管架构(ALB/CloudFront):ACM 自动续期,零配置
- 自建 Nginx:Certbot + ACME,推荐 Nginx 插件模式
所有操作在 Amazon Linux 2023 + Nginx 1.28 + Certbot 2.6 环境下实测验证。
参考:
- 亚马逊云科技官博 - 使用ACME协议实现证书自动续期
- Amazon Certificate Manager 文档
- RFC 8555 - Automatic Certificate Management Environment
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/280024.html