ACME 把证书申请变成自动化流程
ACME 是一套标准化的证书自动化签发协议,让客户端能通过程序证明自己对某个域名的控制权,然后获得签发好的证书,全程无需人工交互。Let's Encrypt 是最广为人知的免费实现,签发有效期 90 天的证书,靠自动续期维持长期有效。它的价值在于把证书管理从「日历提醒加手工替换」变成「一次配置长期自动运行」。
三种挑战类型
| 挑战类型 | 验证方式 | 适用场景 |
|---|---|---|
| HTTP-01 | 在 80 端口放置验证文件供对方访问 | 最常见,要求域名 80 端口可被公网访问 |
| DNS-01 | 添加一条指定的 TXT 记录 | 申请通配符证书、80 端口不可用的场合 |
| TLS-ALPN-01 | 在 443 端口用临时证书完成握手 | 无法开放 80 端口时需要 443 可达 |
主流客户端用法
主流客户端用法
certbot certonly --webroot -w /var/www/html -d example.com -d www.example.com # 最通用的申请方式
certbot renew --dry-run # 演练续期,确认自动续期链路可用
acme.sh --issue --dns dns_ali -d '*.example.com' # 通过 DNS 接口申请通配符证书
acme.sh --install-cert -d example.com --key-file k.pem --fullchain-file f.pem --reloadcmd 'nginx -s reload'
lego --email you@example.com --dns cloudflare --domains example.com --domains '*.example.com' run典型使用场景
- 自建站点免费启用 HTTPS,省去采购证书的流程
- 申请通配符证书覆盖大量子域,减少逐个签发的工作量
- 把证书续期接入定时任务,彻底摆脱手工替换
- 内网服务通过 DNS 验证方式签发证书,避免暴露验证端口
- 多节点部署时统一签发并分发,保证各节点证书一致
证书有效期是 90 天,续期失败的直接影响就是站点过期中断。务必把续期任务的执行日志纳入监控,而不是只在到期时才发现失败。
申请前先了解签发方的速率限制,测试阶段应使用其提供的演练环境,避免因反复失败触发限额导致正式签发被阻塞。
HTTP-01 配合 webroot 方式时,验证路径 /.well-known/acme-challenge/ 必须能被公网直接访问;站点若前置了 CDN、WAF 或整站跳转,验证请求可能被拦截或改写而校验失败。用发行版打包的 certbot 时,续期通常已由 systemd 定时器或 cron 任务自动执行,确认它处于启用状态即可。