Certbot dry-run 被 CAA 拒绝:核对测试账户的 accounturi
Certbot 模拟续期使用测试 ACME 账户,可能被仅绑定生产账户的 CAA 拒绝。核对真实服务器和账户 URI,再保留限制单独授权。
正式证书还有效,执行 certbot renew --dry-run 却报 CAA record for example.com prevents issuance。如果 CAA 的 accounturi 只允许生产 ACME 账户,默认使用 Let’s Encrypt staging 的测试续期可能被它拒绝。这条报错不能直接证明生产续期也失败了。
这一判断适用于启用了账户绑定的 CAA 策略。要从日志确认请求实际用了哪台 ACME 服务器和哪个账户;Certbot 的 --server 等设置可以改变测试目标。曾在 Certbot 2.11.0 的 DNS 验证场景出现的这个区别,在当前支持 dry-run 的版本中仍需检查。
从失败日志区分测试请求和正式请求
默认情况下,--dry-run 向 staging 申请测试证书,且不把取得的测试证书保存成正式证书。生产与 staging 的账户对象是分开的,账户 URI 也包含不同服务器地址。
例如下面只允许一个生产账户的 CAA,不能同时授权另一测试账户,URI 和数字均为示例:
example.com. CAA 0 issue "letsencrypt.org;accounturi=https://acme-v02.api.letsencrypt.org/acme/acct/123456789"
核对日志里的 ACME directory、授权和 challenge 地址,以及本次账户信息。看到 acme-staging-v02.api.letsencrypt.org,应按测试账户继续查。账户数字末尾相似、使用同一邮箱,都不能代替完整账户 URI 匹配。
同时看具体错误类型。Type: caa 是签发策略拒绝;Incorrect TXT record 是 DNS 验证内容错误。它们可能在不同测试轮次出现,不能把后者也解释成 accounturi 限制。客户端给出的“增加 DNS 等待时间”提示,也不能改变明确的 CAA 账户许可。
确认正在使用的账户,而非另一个安装目录
在同一个 Certbot 安装入口和相同配置目录下,可以查询已经存在的账户,例如:
certbot show_account
certbot show_account --staging
有自定义 ACME 服务器、配置目录或多个账户时,按实际调用补齐对应选择参数;如果自动任务使用容器或另一套虚拟环境,在个人终端里运行这两条未必查看到同一份状态。没有相应账户的查询错误,也不代表生产账户失效。
取得的是账户详情,不应复制或公开 ACME 私钥、DNS API 凭据及完整认证日志。确认实际测试账户后,再决定组织是否允许它签发测试证书。
保留生产限制,单独授权需要的测试账户
如政策允许 staging 测试,可新增另一条同类型 CAA,分别绑定两个真实账户。例如两条普通名称授权:
example.com. CAA 0 issue "letsencrypt.org;accounturi=https://acme-v02.api.letsencrypt.org/acme/acct/123456789"
example.com. CAA 0 issue "letsencrypt.org;accounturi=https://acme-staging-v02.api.letsencrypt.org/acme/acct/987654321"
需要把示例 URI 替换成自己正在使用的账户 URI,不能照抄账户数字。多个同类型记录是累加许可;不要在一条记录里重复写两个 accounturi 参数,RFC 定义这种记录无法满足账户授权。
若现有策略还有 validationmethods=dns-01 等限制,按本次实际验证方式保留。通配符存在单独 issuewild 策略时,也要核对它绑定的账户;没有 issuewild 时,通配符使用 issue 的许可。两类名称都使用同一限制时,通常无需复制一组相同的 issuewild。只有 issuewild 而没有 issue,也不能据此认定普通名称被禁止。
修改前保存完整记录集及 TTL,确认新增账户许可符合域名管理策略。删除 accounturi 会放宽到该机构的任意账户,不能把它当作默认修复。若禁止测试账户,保留限制并明确这次测试为何不能通过,不要用反复正式签发代替测试。
用一次受控测试核对结果
先检查适用位置的权威 CAA 返回值与预期一致,等待记录同步和相关缓存过期。然后使用原定安装入口、账户、插件和证书配置再次测试;指定证书名称时须使用现有 Certbot 证书条目的名称。
dry-run 也可能运行 pre/post hooks、临时修改并恢复 Web 服务配置,造成 reload 或短暂中断。测试前检查这些动作,安排可接受的时间。deploy hooks 默认不运行,显式启用 --run-deploy-hooks 时另行审核其影响。
成功标准是这次模拟续期不再因 CAA 账户限制失败,且全部预期名称完成测试授权。随后核对正式证书仍是预期证书、实际服务正常;staging 成功只证明这次测试环境路径,不自动验证生产账户和生产续期结果。
需要回退 DNS 时恢复已备份的记录集。恢复到仅允许生产账户后,staging 测试再次被拒绝是预期结果;DNS 回退不会撤销已签发证书,也不能自动撤回 hooks 已产生的业务影响。


