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 记录:凭据泄漏时影响范围会限制在证书校验路径上,而不是整个域名区。凭据应存放在密钥管理服务或受控配置中,避免写入脚本与仓库。