如何解决 ACM 证书颁发或续订时的 CAA“失败”错误?

3 分钟阅读
0

我通过 AWS Certificate Manager (ACM) 请求新证书或尝试续订证书,但域名状态为“失败”。即使证书请求失败,但验证状态仍为“成功”。

简短描述

证书颁发机构授权 (CAA) 记录是 DNS 记录,可用来控制能为域名颁发证书的证书颁发机构 (CA)。ACM 会检查 CAA 记录,以验证域名所有者是否允许 ACM 为域名颁发 SSL 证书。CAA 会检查以下情况:

  • CAA 记录检查沿着 DNS 域名树向上移动。
  • 如果没有 CAA 记录,则任何 CA 都可以颁发证书。
  • CAA 记录检查遵循 CNAME 记录。
  • “issue”标签可用于非通配符域名和通配符域名,而“issuewild”标签仅影响通配符域名。

解决方法

CAA 记录检查沿着 DNS 域名树向上移动

CAA 记录检查从所请求的域名开始,然后在 DNS 域名树中向上移动。如果请求的是 www.example.com 的证书,ACM 会首先检查三级域名 www.example.com 的 CAA 记录。然后,ACM 会检查二级域名 example.com。

找到 CAA 记录后,将停止 CAA 查询,找到的记录随即生效。以下示例显示了在为 www.example.com 请求证书时,哪条 CAA 记录会生效:

(Example 1 / www.example.com)Domain   Record type  Flags  Tag      Value   
www.example.com.   CAA           0      issue   "amazon.com"
example.com.   CAA           0      issue   "SomeCA.com"

(Result: CAA passed)

三级域名的记录生效,允许 ACM 颁发证书。未使用二级域名记录。

(Example 2 / www.example.com)Domain   Record type  Flags  Tag      Value   
www.example.com.   CAA           0      issue   "SomeCA.com"
example.com.   CAA           0      issue   "amazon.com"

(Result: CAA failed)

第一条记录生效,阻止 ACM 颁发证书。第二条记录遭到忽略。

(Example 3 / www.example.com)Domain   Record type  Flags  Tag      Value   
test.example.com.   CAA           0      issue   "SomeCA.com"
example.com.   CAA           0      issue   "amazon.com"

(Result: CAA passed)

第一条记录不影响 www.example.com 的 CAA 记录。第二条记录生效,允许 ACM 颁发证书。

以下示例显示了在为 example.com 请求证书时,哪条 CAA 记录会生效:

(Example 4 / example.com)Domain   Record type  Flags  Tag      Value   
www.example.com.   CAA           0      issue   "amazon.com"
example.com.   CAA           0      issue   "SomeCA.com"

(Result: CAA failed)

第一条记录没有生效,因为 www.example.com 是所请求域名的子域名,而且 CAA 记录检查不会沿着 DNS 树向下移动。第二条记录生效,阻止 ACM 颁发证书。

(Example 5 / example.com)Domain   Record type  Flags  Tag      Value   
www.example.com.   CAA           0      issue   "SomeCA.com"
example.com.   CAA           0      issue   "amazon.com"

(Result: CAA passed)

第一条记录遭到忽略,因为 www.example.com 是所请求域名的子域名,而且 CAA 记录检查不会沿着 DNS 域名树向下移动。第二条记录生效,允许 ACM 颁发证书。

如果没有 CAA 记录,则任何 CA 都可以颁发证书

如果没有为请求的域名配置 CAA 记录,则包括 ACM 在内的任何 CA 都可以为域名颁发证书。例如,在以下示例中,ACM 可以为 example.com 颁发证书:

(Example 6 / example.com)Domain   Record type  Flags  Tag      Value   
www.example.com.   CAA           0      issue   ";"

(Result: CAA passed)

由于 CAA 检查不会沿着 DNS 树中向下移动,这条记录遭到忽略。

CAA 记录检查遵循 CNAME 记录

CAA 记录检查会继续处理指向不同域名的 CNAME 记录。在以下示例中,www.example.com 指向有 CAA 记录的 www.example.net:

(Example 7 / www.example.com)Domain   Record type  Flags  Tag      Value   
www.example.com.   CNAME www.example.net
www.example.net.   CAA           0      issue   ";"

(Result: CAA failed)

第一条记录将 CAA 的检查重定向到 www.example.net。这条 CAA 记录阻止任何 CA 颁发证书,而且 ACM 无法为 www.example.com 颁发证书。

如果指向的域名 www.example.net 没有 CAA 记录,则 CAA 记录检查会向上移至基础域名 example.com。

(Example 8 / www.example.com)Domain   Record type  Flags  Tag      Value   
www.example.com.   CNAME www.example.net
example.com.   CAA           0      issue   "amazon.com"

(Result: CAA passed)

在这种情况下,ACM 可以为 www.example.com 颁发证书,因为 www.example.net 没有配置任何 CAA 记录。请注意,CAA 记录检查不会向上移至 CNAME 记录的父级,也不会检查 example.net 的 CAA 记录。有关更多信息,请参阅 CA/CA/Browser Forum 网站上的附录 A

“issue”标签可用于非通配符域名和通配符域名,而“issuewild”标签仅影响通配符域名

“issue”标签允许 CA 为非通配符域名 www.example.com 和通配符域名 *.example.com 颁发证书。可以使用“issueWild”标签来指示 CA 如何处理通配符域名。以下示例显示了在为 *.example.com 请求证书时,哪条 CAA 记录会生效:

(Example 9 / *.example.com)Domain   Record type  Flags  Tag      Value   
example.com.   CAA           0      issue   "amazon.com"

(Result: CAA passed)

CAA 记录允许 ACM 颁发非通配符域名和通配符域名证书,因此 ACM 可以颁发证书。

(Example 10 / *.example.com)Domain   Record type  Flags  Tag      Value   
example.com.   CAA           0      issue   "amazon.com"
example.com.   CAA           0      issuewild   ";"

(Result: CAA failed)

标签字段“issuewild”取代了通配符域名请求的“issue”,因此 ACM 无法颁发证书。**注意:**必须为 example.com 设置 CAA 记录,才可允许 CA 为 *.example.com 颁发证书。

(Example 11 / *.example.com)Domain   Record type  Flags  Tag      Value   
*.example.com.   CAA           0      issuewild   "amazon.com"
example.com.   CAA           0      issuewild   ";"

(Result: CAA failed)

第一条 CAA 记录遭到忽略,第二条 CAA 记录阻止 CA 为 *.example.com 颁发证书。

以下示例显示了在为 *.test.example.com 请求证书时,哪条 CAA 记录会生效:

(Example 12 / *.test.example.com)Domain   Record type  Flags  Tag      Value   
test.example.com.   CAA           0      issue   "amazon.com"
example.com.   CAA           0      issuewild   ";"

(Result: CAA passed)

CAA 检查会找到第一条记录,终止沿着 DNS 域名树向上移动,并允许 ACM 颁发证书。

当请求非通配符域名时,将忽略“issuewild”标签。以下示例显示了在为 www.example.com 请求证书时,哪条 CAA 记录会生效:

(Example 13 / www.example.com)Domain   Record type  Flags  Tag      Value   
www.example.com.   CAA           0      issuewild   "amazon.com"
example.com.   CAA           0      issue   ";"

(Result: CAA failed)

这属于非通配符域名请求,因此第一条 CAA 记录遭到忽略。第二条 CAA 记录生效,不允许 CA 颁发证书。

有关配置 CAA 记录的更多信息,请参阅(可选)配置 CAA 记录

相关信息

Datatracker 网站上的 DNS 证书颁发机构授权 (CAA) 资源记录

AWS 官方
AWS 官方已更新 4 个月前