为什么我的 AWS Certificate Manager(ACM)证书的 DNS 验证状态停留在待验证?

上次更新日期:2022 年 6 月 8 日

我使用 DNS 验证方式请求了一个新的 AWS Certificate Manager(ACM)证书,但其状态停留在待验证。

简短描述

当您使用 DNS 验证请求 ACM 证书时,ACM 会为证书的域范围中指定的每个域名提供一个 CNAME 记录。您必须将 CNAME 记录添加到您的 DNS 配置中。ACM 使用 CNAME 记录来验证域的所有权。所有域验证完成后,证书的状态将从待验证变为成功

如果有下列任何情况,使用 DNS 验证方式请求的证书可能会停留在待验证状态:

  • CNAME 记录未添加到正确的 DNS 配置中。
  • CNAME 记录含有多余的字符或有缺失的字符。
  • CNAME 记录已添加到正确的 DNS 配置中,但 DNS 提供商自动将裸域添加到 DNS 记录的末尾。
  • 同一个域名存在一条 CNAME 记录和一条 TXT 记录。

注意:ACM 会定期检查 DNS 记录。此过程不能手动检查。

有关 DNS 验证的更多信息,请参阅使用 DNS 验证域所有权

解决方法

CNAME 记录未添加到正确的 DNS 配置

要确认 CNAME 记录是否已正确添加到 DNS 配置中,请运行类似以下内容的命令:

注意:example-cname.example.com 替换为您的 ACM CNAME 记录。

Linux 和 macOS:

dig +short _example-cname.example.com

Windows:

nslookup -type=cname _example-cname.example.com

如果 CNAME 记录已经添加到正确的 DNS 配置中并成功传播,命令将在输出中返回 CNAME 记录的值。

注意:某些 DNS 提供商可能需要 24-48 小时才会传播 DNS 记录。

如果您的证书处于待验证状态,请确认 ACM 提供的 CNAME 记录已添加到正确的 DNS 配置中。要确定应将 CNAME 记录添加到哪个 DNS 配置中,请运行类似以下内容的命令:

Linux 和 macOS:

dig NS example.com

Windows:

nslookup -type=ns example.com

命令将提供正确的 DNS 配置中的 NS 记录包含的名称服务器。请务必确保添加到您的 DNS 配置中的 CNAME 记录包含一条 NS 记录,该记录中包含命令输出中提供的名称服务器。

有关将 CNAME 记录添加到 Route 53 托管区域的更多信息,请参阅使用 Amazon Route 53 控制台创建记录

注意:当相应的 CNAME 记录位于 Route 53 私有托管区域中时,不可以验证域的所有权。CNAME 记录必须位于公共托管区域中。

CNAME 记录含有多余的字符或有字符缺失

确保添加到 DNS 配置的 CNAME 记录中的名称或值不包含任何多余的字符或没有字符缺失。

CNAME 记录已添加到正确的 DNS 配置中,但 DNS 提供商自动将裸域添加到 DNS 记录的末尾

DNS 提供商可能会在所有 DNS 记录名称字段的末尾自动添加裸域。在这种情况下,CNAME 记录添加到您的 DNS 配置后的传播结果将与以下类似:

_example-cname.example.com.example.com

证书请求在最终失败前停留在待验证状态。

要确定 DNS 提供商是否会在 CNAME 记录的末尾自动添加裸域,请运行类似以下内容的命令:

Linux 和 macOS:

dig +short _example-cname.example.com.example.com

Windows:

nslookup -type=cname _example-cname.example.com.example.com

如果输出返回了 CNAME 记录的值,则说明 DNS 提供商在 DNS 记录的名称字段末尾添加了裸域。

要解决此问题,请编辑 CNAME 记录以从您为名称字段输入的文本中移除裸域。

在 DNS 提供商添加裸域后,将只有一个裸域存在。

同一个域名存在一条 CNAME 记录和一条 TXT 记录。

要确认同一个域是否存在 CNAME 记录和 TXT 记录,请运行类似以下内容的命令:

Linux 和 macOS:

dig +short CNAME <cname_record_name>
dig TXT <cname_record_name>

Windows:

nslookup -type=CNAME <cname_record_name>
nslookup -type=TXT <cname_record_name>

比较 CNAME 记录类型和 TXT 记录类型的 dig 命令的输出。如果它们相同,则是 RFC 1034 中指出的格式错误的记录,导致证书处于待验证状态。要解决此问题,您可以删除 TXT 记录。

有关详细信息,请参阅排查 DNS 验证问题