

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# ACME 域名验证
<a name="acm-acme-domain-validation"></a>

ACME 域验证资源预授权 ACME 终端节点可以为哪些域颁发证书。与标准 ACM 域验证（作为证书申请的一部分进行设置）不同，ACME 域验证是 PKI 管理员事先配置的永久资源。这种分离使应用程序所有者无需自己执行域验证即可申请证书。

每次域名验证都需要在 DNS 中有一个 CNAME 记录。这与用于标准 ACM DNS 验证的 CNAME 记录类型相同。但是，ACME 域验证特定于各个端点。不同的端点需要单独的 CNAME 记录，即使是同一个域也是如此。

## ACME 域名验证与标准 ACM 验证有何关系
<a name="acm-acme-dv-comparison"></a>

两种机制都使用相同的 CNAME 记录格式和用途：通过在 DNS 中放置特定记录来证明域名所有权，如中所[Amazon Certificate Manager DNS 验证DNS 验证](dns-validation.md)述。在这两种情况下，CNAME 都会将正在进行的域名验证委托给 ACM。由于记录指向 ACM 管理的目标，因此 ACM 可以随着时间的推移重新验证域名所有权，而无需您采取进一步行动。这就是 ACM 自动续订证书的原因。以下列表描述了主要区别：
+ 使用标准 ACM 验证，您可以在证书请求中建立 CNAME，例如对的调用。`RequestCertificate`
+ ACME 域验证是一种永久性 ACM 资源，管理员可以事先配置该资源，与任何单个证书申请无关。
+ ACME 域验证包括一个可配置的范围，允许您控制端点是否可以为确切的域名、其子域名或通配符名称颁发证书。有关更多信息，请参阅 [域名验证范围](#acm-acme-dv-scope)。

## 域名验证范围
<a name="acm-acme-dv-scope"></a>

创建域验证时，需要配置一个范围，控制使用此验证可以颁发哪些证书。示波器有三个独立的设置。有关*顶点域和*子域*名的*定义，请参阅。[域名](acm-concepts.md#concept-dn)

`ExactDomain` (`ENABLED`/`DISABLED`)  
允许使用您指定的确切域的证书。例如，如果您指定顶点域`example.com`，则此设置允许使用证书。`example.com`

`Subdomains` (`ENABLED`/`DISABLED`)  
允许您指定域的子域名使用证书（例如，`www.example.com`或`api.example.com`）。

`Wildcards` (`ENABLED`/`DISABLED`)  
允许您指定的域名使用[通配符证书](acm-concepts.md#concept-wildcard)（例如，`*.example.com`）。

您可以组合这些设置。下表显示了作用域组合示例。


**域验证作用域组合**  

| DomainName | ExactDomain | 子域名 | 通配符 | 允许使用证书 | 
| --- | --- | --- | --- | --- | 
| example.com | 已启用 | DISABLED | DISABLED | 仅限 example.com | 
| example.com | 已禁用 | 已启用 | DISABLED | sub.example.com、api.example.com 等等 | 
| example.com | DISABLED | 已禁用 | 已启用 | \*.example.com 仅限 | 
| example.com | 已启用 | 已启用 | 已启用 | example.com、任何子域名和 \*.example.com | 
| internal.example.com | 已启用 | 已启用 | DISABLED | internal.example.com 及其子域名 | 

## 状态生命周期
<a name="acm-acme-dv-status"></a>

创建域名验证后，ACM 会尝试验证 CNAME 记录最长 72 小时。如果在此时间段内未检测到记录，则域验证将转换为`INVALID`状态。确保在创建域名验证后立即配置 CNAME 记录。

ACME 域名验证会进入以下状态：

`VALIDATING`  
CNAME 记录正在验证中。ACM 尝试验证记录的时间长达 72 小时。如果在此时间段内未确认记录，则状态将转换为，`INVALID`并显示`TIMED_OUT`失败原因。

`VALID`  
CNAME 记录已得到确认。域名验证处于活动状态，可用于发行。

`INVALID`  
CNAME 记录验证失败。请参阅以下失败原因。

`DELETING`  
正在删除域名验证。

**失败原因**

`ACCESS_DENIED`  
权限不足，无法验证 DNS 记录。

`DOMAIN_MISMATCH`  
CNAME 记录与预期值不匹配。

`HOSTED_ZONE_NOT_FOUND`  
找不到指定的托管区域。

`INTERNAL_FAILURE`  
出现内部错误。再次尝试创建域名验证。

`DOMAIN_NOT_ALLOWED`  
不允许发行该域名。该域名可能在限制列表中，或者可能不符合发行要求。

`CAA_ERROR`  
证书颁发机构授权 (CAA) DNS 记录会阻止 ACM 为此域名颁发。确保您的 CAA 记录允许 Amazon 颁发证书。

`TIMED_OUT`  
在 72 小时内未检测到 CNAME 记录。验证记录是否已在 DNS 中传播，并且与预期的名称和值完全匹配。

## 创建域名验证
<a name="acm-acme-dv-create"></a>

您可以使用 ACM 控制台或 CLI Amazon 创建 ACME 域验证。

### 创建域名验证（控制台）
<a name="acm-acme-dv-create-console"></a>

1. 登录 Amazon 管理控制台并打开 ACM 控制台。

1. 在左侧导航窗格的 **ACME** 下，选择**终端节点**。

1. 选择要配置的端点。

1. 选择 “**域**” 选项卡。

1. 选择**添加域**。

1. 在 “**域名**” 中，输入域名（例如，`example.com`）。

1. 为确切的域名、子域名和通配符配置范围设置。

1. （可选）在**托管区域 ID** 中，输入 Route 53 托管区域 ID 以自动配置别名记录。

1. （可选）在 “**标签**” 下，向域配置添加一个或多个标签。

1. 选择**添加域配置**。

1. 如果您没有使用 Route 53 自动配置，请在您的 DNS 中配置 CNAME 记录。所需的别名记录名称和值显示在域配置详细信息中。

1. 等待状态更改为`VALID`。

### 创建域名验证 (Amazon CLI)
<a name="acm-acme-dv-create-cli"></a>

运行以下命令创建 ACME 域验证：

```
aws acm create-acme-domain-validation \
    --acme-endpoint-arn arn:aws:acm:{{region}}:{{111122223333}}:acme-endpoint/{{00000000-0000-0000-0000-000000000000}} \
    --domain-name {{example.com}} \
    --prevalidation-options '{
        "DnsPrevalidation": {
            "DomainScope": {
                "ExactDomain": "ENABLED",
                "Subdomains": "ENABLED",
                "Wildcards": "DISABLED"
            },
            "HostedZoneId": "{{Z1234567890}}"
        }
    }'
```

要检查状态并获取 CNAME 详细信息，请运行以下命令：

```
aws acm describe-acme-domain-validation \
    --acme-domain-validation-arn arn:aws:acm:{{region}}:{{111122223333}}:acme-endpoint/{{00000000-0000-0000-0000-000000000000}}/acme-domain-validation/{{11111111-1111-1111-1111-111111111111}}
```

## 管理域名验证
<a name="acm-acme-dv-manage"></a>

您可以对 ACME 域验证执行以下管理操作：

描述  
查看状态和 CNAME 记录详情。

列表  
查看终端节点的所有域名验证。

更新  
修改作用域配置。

删除  
移除域名验证。已颁发的证书不受影响。