首页/网络/协议速查/ACME 协议与 Let's Encrypt

ACME 协议与 Let's Encrypt

免费自动化证书体系:客户端证明域名控制权(HTTP-01/DNS-01/TLS-ALPN-01)后签发 90 天证书,全流程无人值守。

协议速查网络更新于 2026-10-13

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 任务自动执行,确认它处于启用状态即可。

易错点

  • DNS 验证添加 TXT 记录后立刻触发校验,记录尚未传播导致校验失败,脚本应等待传播完成再发起验证
  • 续期脚本依赖的 API 凭据过期或被回收,续期在到期前几天静默失败,站点直接中断
  • 只签发证书没有配置重载命令,新证书已经下发但服务仍在用旧证书,表现为「已续期却仍报过期」
  • 在负载均衡与多台后端上只更新了一台,用户命中不同节点时证书状态不一致

数据来源与参考

  • RFC 8555(ACME)
  • Let's Encrypt 官方文档

相关工具

​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌