认证机构授权(CAA)记录让域名持有者声明,哪些证书颁发机构可以为该域名签发证书。只有当记录与真实续期路径一致、且操作者理解策略如何从父级名称继承时,它才有用。

跟随别名并逐级向上,遇到第一个相关非空 CAA 记录集就停止,不合并所有父级策略。使用 CA 的授权标识;issuewild 存在时优先控制通配符签发。CAA 约束签发,不执行 HTTPS 信任验证,也不吊销已有证书。应在当前证书健康时编排续期变更。
CAA 在签发时授权签发者。查询遇到第一个相关非空记录集就停止,通配符标签进一步细化规则。已有证书与 HTTPS 信任属于不同边界,图中签发者仅为示例。

检视当前策略

查询确切主机名及其父名称:

for name in www.example.test example.test test; do
  printf '== %s\n' "$name"
  dig +noall +answer CAA "$name"
done

这里用占位域名通过已配置的解析器查询。叶子处空应答不一定代表没有适用策略:查询会跟随别名,并在逐级向上时遇到第一个相关的非空 CAA 记录集就停止,而不是合并所有父级限制。还要查看 DNS 状态与权威信息;只显示答案的空输出可能隐藏 NXDOMAIN 或 SERVFAIL。诊断变更时应比较权威应答与递归查询结果。

匹配 CA 的签发者标识

记录使用如 issue 或 issuewild 等标签与一个签发者域值:

example.test. 3600 IN CAA 0 issue "letsencrypt.org"

该值是授权标识,不是证书里的显示名。在证书颁发机构的当前文档中确认它。没有 issuewild 时,issue 也控制通配符签发;存在 issuewild 时,通配符请求优先适用它。同一标签的多条记录提供备选授权,并不是要求每一家 CA 同时参与。CAA 也不选择某张具体的中间证书。

在续期前编排 DNS 变更

在当前证书健康时添加或收紧 CAA。等待先前 TTL 对应的完整时间,查询权威与递归应答,并运行 ACME 客户端支持的暂存或续期测试。准备好回滚记录。

不要在过期事故期间添加限制性记录,除非签发者路径已验证。一条语法正确但错误的策略,会把自动续期变成硬失败。

观察签发失败

CAA 检查发生在签发时,而不是每次 HTTPS 请求。修改 CAA 不会吊销已有证书,也不能证明历史签发符合当时的策略。因此证书监控必须同时覆盖当前过期与续期尝试。把有效的 DNS 应答随 ACME 失败一起记录,而不是只记录一条笼统的授权错误。

来源