如何解决颁发或续订 ACM 证书时遇到的 CAA 错误?

上次更新时间:2020 年 4 月 15 日

我请求了新证书或尝试了通过 AWS Certificate Manager (ACM) 续订证书。域名状态为“失败”,并且我收到了类似以下内容的错误:

“请求失败。此证书的状态为‘失败’。由于证书颁发机构身份验证 (CAA) 错误,一个或多个域名未通过验证。”

验证状态为“成功”,但实际上证书请求失败。

简短描述

证书颁发机构授权 (CAA) 记录是一种 DNS 记录,供您控制哪些证书颁发机构 (CA) 可以为您的域或子域颁发证书。请求或续订 ACM 证书时,ACM 会检查 CAA 记录,以验证是否允许下列条件:

  • CAA 记录检查上攀 DNS 名称树
  • 无 CAA 记录意味着任何 CA 都可以颁发证书
  • CAA 记录检查跟随 CNAME 记录
  • “issue”标签可用于非通配符域和通配符域,而“issuewild”标签仅影响通配符域

解决方法

CAA 记录检查上攀 DNS 名称树

CAA 记录检查从请求域开始,然后在 DNS 层次结构树中上攀。如果您为 www.example.com 请求证书,则 ACM 先检查第三级域 www.example.com 的 CAA 记录,然后检查第二级域名 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 指向 www.example.net,后者也有 CAA 记录:

(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.net)。

(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 颁发证书。请注意,CAA 记录检查不会上攀到 CNAME 记录的父级,不检查 example.net 的 CAA 记录。有关更多信息,请参阅公共可信证书的颁发和管理基本要求中的附录 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 检查找到第一个记录,终止攀爬,并允许 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 记录


这篇文章对您有帮助吗?

我们可以改进什么?


需要更多帮助?