首页/安全/加密与证书速查/ACME 协议与 Let's Encrypt 签发

ACME 协议与 Let's Encrypt 签发

ACME(RFC 8555)用自动化方式完成域名验证与签发:账号密钥、订单、HTTP-01/DNS-01/TLS-ALPN-01 挑战、CSR 提交与证书下载;Let's Encrypt 是广泛使用的公共实现。

加密与证书速查安全更新于 2026-10-13

ACME 是什么

ACME(RFC 8555)是自动化证书管理协议,把签发流程拆成账户、订单、挑战、CSR 提交与证书下载几个步骤,客户端脚本可全自动完成申请与续期。Let's Encrypt 是使用最广的公共实现,证书有效期 90 天,因此自动续期不是可选项而是必需项。证书的短暂有效期换来的是不再依赖复杂的吊销机制。

基本信息

标准RFC 8555
流程注册账号 → 创建订单 → 完成域名挑战 → 提交 CSR → 下载证书
挑战类型http-01(放置校验文件)、dns-01(写 TXT 记录)、tls-alpn-01(443 端口应答)
有效期Let's Encrypt 证书 90 天,需自动续期
速率限制存在按域名与账户的签发频率上限,批量操作要规划
常见客户端certbot、acme.sh、lego 等

典型使用场景

  • 站点证书全自动签发与续期:配合定时任务,无需人工干预
  • 多域名与多站点管理:同一账户下批量维护多个域名
  • 通配符证书:使用 dns-01 挑战申请通配符域名证书
  • 内网服务:无公网 80 端口的服务可用 dns-01 完成验证
  • 测试环境:对接 ACME 的测试目录,避免消耗生产速率配额

观察与验证流程

观察与验证流程
# http-01 挑战文件会被放置在网站目录下,路径固定
curl -s http://example.com/.well-known/acme-challenge/<token>
# 生产环境用客户端工具自动化完成,不要手工维护挑战文件
# 通配符与内网场景通常使用 dns-01:写 TXT 记录后等待生效
# 续期后核对新证书的有效期与域名列表
openssl x509 -in /etc/letsencrypt/live/example.com/fullchain.pem -noout -dates -ext subjectAltName

挑战类型对照

类型验证方式适用场景注意点
http-01在 80 端口放置校验文件公网可达的普通站点需放行 80 端口,跳转规则可能干扰校验
dns-01添加指定 TXT 记录通配符证书与内网服务需 DNS API 凭据且要安全存放
tls-alpn-01在 443 端口返回专用证书只开放 443 的场景需 TLS 服务配合,环境支持度不一
多域名订单同一订单包含多个域名一次申请多个域名任一域名失败会导致整个订单失败
不要在循环或批量脚本里无节制调用签发接口:ACME 服务端有速率限制,触发后一段时间内无法签发,可能让关键业务域名也续期失败。批量操作前先核对配额,并优先用测试目录验证流程。
DNS-01 的凭据权限要按最小化原则分配,最好只允许修改 _acme-challenge 记录:凭据泄漏时影响范围会限制在证书校验路径上,而不是整个域名区。凭据应存放在密钥管理服务或受控配置中,避免写入脚本与仓库。

易错点

  • 在批量脚本里反复触发签发:命中速率限制后连自动续期都会失败,需要提前估算配额
  • DNS-01 凭据权限过大:泄漏后可修改整个域名区的解析记录,应按最小权限授权
  • 续期后未重新加载服务:新证书已下载但服务仍在用旧证书,巡检时以线上抓取结果为准
  • 把 80 端口跳转规则设计成会拦截校验路径:http-01 校验失败,需为校验路径保留例外
  • 依赖人工续期:90 天有效期下人工流程必然出现遗漏,自动续期应作为默认方案

数据来源与参考

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