

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

# 启用 DNSSEC 签名并建立信任链。
<a name="dns-configuring-dnssec-enable-signing"></a>

****  
递增步骤适用于托管区域拥有者和父区域维护者。这二者可以是同一个人，但如果不是，区域拥有者应该通知父区域维护者并与其合作。

我们建议按照本文中的步骤对区域进行签名并将其纳入信任链中。以下步骤将最大限度地降低启用 DNSSEC 所存在的风险。

**注意**  
在 [在 Amazon Route 53 中配置 DNSSEC 签名](dns-configuring-dnssec.md) 中开始之前，请务必阅读先决条件。

启用 DNSSEC 签名需要执行三个步骤，如以下几节所述。

**Topics**
+ [步骤 1：准备启用 DNSSEC 签名](#dns-configuring-dnssec-enable-signing-step-1)
+ [步骤 2：启用 DNSSEC 签名并创建 KSK](#dns-configuring-dnssec-enable)
+ [步骤 3：建立信任链](#dns-configuring-dnssec-chain-of-trust)

## 步骤 1：准备启用 DNSSEC 签名
<a name="dns-configuring-dnssec-enable-signing-step-1"></a>

准备步骤可通过监控区域可用性并减少启用签名与插入委派签名者 (DS) 记录之间的等待时间，帮助您最大限度地降低启用 DNSSEC 所存在的风险。

**准备启用 DNSSEC 签名**

1. 监控区域可用性。

   您可以监控区域以了解域名的可用性。这可以帮助您在启用 DNSSEC 签名后解决可能需要回滚的任何问题。您可以使用查询日志记录来监控流量最多的域名。有关设置查询日志记录的更多信息，请参阅 [监控 Amazon Route 53](monitoring-overview.md)。

   可以通过 Shell 脚本或第三方服务来完成监控。但是，其不应作为确定是否需要回滚的唯一信号。由于域名不可用，您也可能会从客户处获得反馈。

1. 降低区域的最大 TTL。

   区域的最大 TTL 是该区域中最长的 TTL 记录。在以下示例区域中，区域的最大 TTL 为 1 天（86400 秒）。    
[See the AWS documentation website for more details](http://docs.amazonaws.cn/Route53/latest/DeveloperGuide/dns-configuring-dnssec-enable-signing.html)

   降低区域的最大 TTL 将有助于缩短启用签名与插入委派签名者 (DS) 记录之间的等待时间。我们建议将区域的最大 TTL 降低到 1 小时（3600 秒）。如果任何解析程序在缓存已签名记录时遇到问题，您可以在一个小时后回滚。

   **回滚：**撤消 TTL 更改。

1. 降低 SOA TTL 和 SOA 最小字段。

   SOA 最小字段是 SOA 记录数据中的最后一个字段。在以下 SOA 记录示例中，最小字段的值为 5 分钟（300 秒）。    
[See the AWS documentation website for more details](http://docs.amazonaws.cn/Route53/latest/DeveloperGuide/dns-configuring-dnssec-enable-signing.html)

   SOA TTL 和 SOA 最小字段决定了解析程序记住否定回答的时长。启用签名后，Route 53 名称服务器开始返回否定回答的 NSEC 记录。NSEC 包含解析程序可能用来综合否定回答的信息。如果由于 NSEC 信息导致解析程序对姓名假定否定回答而必须回滚，那么您只需等待 SOA TTL 和 SOA 最小字段的最大值，解析程序就会停止假定。

   **回滚：**撤消 SOA 更改。

1. 确保 TTL 和 SOA 最小字段更改有效。

   用于确保您[GetChange](https://docs.amazonaws.cn/Route53/latest/APIReference/API_GetChange.html)到目前为止所做的更改已传播到所有 Route 53 DNS 服务器。

## 步骤 2：启用 DNSSEC 签名并创建 KSK
<a name="dns-configuring-dnssec-enable"></a>

您可以在 Route 53 控制台上使用 Amazon CLI 或启用 DNSSEC 签名并创建密钥签名密钥 (KSK)。
+ [CLI](#dnssec_CLI)
+ [控制台](#dnssec_console)

当您提供或创建 KMS 密钥时，应遵循以下几个要求。有关更多信息，请参阅 [使用适用于 DNSSEC 的客户托管密钥](dns-configuring-dnssec-cmk-requirements.md)。

------
#### [ CLI ]

您可以使用已有密钥，或通过使用自己的 `hostedzone_id`、`cmk_arn`、`ksk_name` 和 `unique_string` 值运行如下 Amazon CLI 命令来创建密钥（以确保请求是唯一的）：

```
aws --region us-east-1 route53 create-key-signing-key \
			--hosted-zone-id $hostedzone_id \
			--key-management-service-arn $cmk_arn --name $ksk_name \
			--status ACTIVE \
			--caller-reference $unique_string
```

有关客户托管式密钥的更多信息，请参阅 [使用适用于 DNSSEC 的客户托管密钥](dns-configuring-dnssec-cmk-requirements.md)。另请参阅[CreateKeySigningKey](https://docs.amazonaws.cn/Route53/latest/APIReference/API_CreateKeySigningKey.html)。

要启用 DNSSEC 签名，请使用您自己的值运行如下 Amazon CLI 命令：`hostedzone_id`

```
aws --region us-east-1 route53 enable-hosted-zone-dnssec \
			--hosted-zone-id $hostedzone_id
```

有关更多信息，请参阅[enable-hosted-zone-dnssec](https://docs.amazonaws.cn/cli/latest/reference/route53/enable-hosted-zone-dnssec.html)和 [EnableHostedZoneDNSSEC](https://docs.amazonaws.cn/Route53/latest/APIReference/API_EnableHostedZoneDNSSEC.html)。

------
#### [ Console ]<a name="dns-configuring-dnssec-enable-procedure"></a>

**要启用 DNSSEC 签名并创建 KSK**

1. 登录 Amazon Web Services 管理控制台 并打开 Route 53 控制台，网址为[https://console.aws.amazon.com/route53/](https://console.amazonaws.cn/route53/)。

1. 在导航窗格中，选择 **Hosted zones**（托管区域），然后选择您要为其启用 DNSSEC 签名的托管区域。

1. 在 **DNSSEC signing**（DNSSEC 签名）选项卡上，选择 **Enable DNSSEC signing**（启用 DNSSEC 签名）。
**注意**  
如果本部分中的选项为 **Disable DNSSEC signing**（禁用 DNSSEC 签名），则表示您已完成启用 DNSSEC 签名的第一步。请确保您为 DNSSEC 的托管区域建立了信任链，或者此区域已经存在信任链，然后您便完成了操作。有关更多信息，请参阅 [步骤 3：建立信任链](#dns-configuring-dnssec-chain-of-trust)。

1. 在 **Key-signing key (KSK) creation**（密钥签名密钥 (KSK) 创建）部分，选择 **Create new KSK**（创建新的 KSK），并在 **Provide KSK name**（提供 KSK 名称）下输入 Route 53 将为您创建的 KSK 名称。名称只能包含字母、数字和下划线 (\_)。此名称必须唯一。

1. 在 **Customer managed CMK**（客户托管 CMK）中，选择 Route 53 在为您创建 KSK 时要使用的客户管理密钥。您可以使用适用于 DNSSEC 签名的现有客户托管密钥，也可以创建新的客户托管密钥。

   当您提供或创建客户托管密钥时，有几个要求。有关更多信息，请参阅 [使用适用于 DNSSEC 的客户托管密钥](dns-configuring-dnssec-cmk-requirements.md)。

1. 输入现有客户托管密钥的别名。如果要使用新的客户托管式密钥，请输入客户托管密钥的别名，Route 53 将为您创建密钥。
**注意**  
如果您选择让 Route 53 创建客户托管密钥，请注意，每个客户托管密钥都会单独收取费用。有关更多信息，请参阅 [Amazon 密钥管理服务定价](https://www.amazonaws.cn/kms/pricing/)。

1. 选择 **Enable DNSSEC signing**（启用 DNSSEC 签名）。

------

**启用区域签名后，请完成以下步骤**（无论是使用控制台还是 CLI）：

1. 确保区域签名有效。

   如果你使用了 Amazon CLI，你可以使用`EnableHostedZoneDNSSEC()`调用输出中的操作 ID 来运行 [get-change](https://docs.amazonaws.cn/cli/latest/reference/route53/get-change.html) 或[GetChange](https://docs.amazonaws.cn/Route53/latest/APIReference/API_GetChange.html)确保所有 Route 53 DNS 服务器都在签署响应（status =`INSYNC`）。

1. 至少等待前一个区域的最大 TTL 的时长。

   等待解析程序清除其缓存中的所有未签名记录。为此，等待时长至少应为前一个区域的最大 TTL。在上面的 `example.com` 区域，等待时间为 1 天。

1. 监控客户问题报告。

   启用区域签名后，客户可能会开始看到与网络设备和解析程序相关的问题。建议的监控周期为 2 周。

   下面是可能会看到的问题示例：
   + 某些网络设备可以将 DNS 响应大小限制在 512 字节以下，这对于某些签名响应来说太小。应重新配置这些网络设备，以便允许更大的 DNS 响应。
   + 一些网络设备对 DNS 响应进行深入检查并删除其无法理解的某些记录，如用于 DNSSEC 的记录。应该重新配置这些设备。
   + 一些客户的解析程序称可以接受比其网络支持的响应大小更大的 UDP 响应。您可以测试网络功能并适当配置解析程序。有关更多信息，请参阅 [DNS 回复大小测试服务器](https://www.dns-oarc.net/oarc/services/replysizetest/)。

**回滚：**调用 [DisableHostedZoneDNSSEC](https://docs.amazonaws.cn/Route53/latest/APIReference/API_DisableHostedZoneDNSSEC.html)，然后回滚中的步骤。[步骤 1：准备启用 DNSSEC 签名](#dns-configuring-dnssec-enable-signing-step-1)

## 步骤 3：建立信任链
<a name="dns-configuring-dnssec-chain-of-trust"></a>

在 Route 53 中为托管区域启用 DNSSEC 签名后，请为托管区域建立信任链，以完成 DNSSEC 签名设置。您可以通过在*父*托管区域创建 Delegation Signer (DS) 记录，并使用 Route 53 提供的信息，以完成此操作。根据域注册的位置，您可以将记录添加到 Route 53 中的父托管区域或其它域注册商。<a name="dns-configuring-dnssec-chain-of-trust-procedure"></a>

**要建立 DNSSEC 签名信任链。**

1. 登录 Amazon Web Services 管理控制台 并打开 Route 53 控制台，网址为[https://console.aws.amazon.com/route53/](https://console.amazonaws.cn/route53/)。

1. 在导航窗格中，选择 **Hosted zones**（托管区域），然后选择要为其建立 DNSSEC 信任链的托管区域。*您必须首先启用 DNSSEC 签名。*

1. 在 **DNSSEC signing**（DNSSEC 签名）选项卡，在 **DNSSEC signing**（DNSSEC 签名）中，选择 **View information to create DS record**（查看信息以创建 DS 记录）。
**注意**  
如果您没有在本部分中看到 **View information to create DS record**（查看信息以创建 DS 记录），那么在建立信任链之前，必须启用 DNSSEC 签名。选择 **Enable DNSSEC signing**（启用 DNSSEC 签名）并完成 [步骤 2：启用 DNSSEC 签名并创建 KSK](#dns-configuring-dnssec-enable) 中的所述步骤，然后回到这些步骤建立信任链。

1. 在 **Establish a chain of trust**（建立信任链）中，选择 **Route 53 registrar**（Route 53 注册商）或者 **Another domain registrar**（另一域注册商），具体取决于您的域注册位置。

1. 使用步骤 3 提供的值以在 Route 53 中为父托管区域创建 DS 记录。如果您的域未托管在 Route 53，请使用提供的值在域注册商网站上创建 DS 记录。

   要建立父区域的信任链：
   + 如果通过 Route 53 管理您的域，请执行以下步骤：

     确保配置正确的签名算法（ECDSAP256SHA256 以及类型 13）和摘要算法（SHA-256 和类型 2）。

     如果 Route 53 是您的注册商，请在 Route 53 控制台中执行以下操作：

     1. 请注意 **Key type**（密钥类型）、**Signing algorithm**（签名算法）和 **Public key**（公有密钥）的值。在导航窗格中，选择 **Registered domains**。

     1. 选择一个域，然后在 **DNSSEC 密钥**选项卡中选择**添加密钥**。

     1. 在**管理 DNSSEC 密钥**对话框中，从下拉菜单中为 **Route 53 注册商**选择适当的**密钥类型**和**算法**。

     1. 为 Route 53 注册商复制 **Public key**（公有密钥）。在 **Manage DNSSEC keys**（管理 DNSSEC 密钥）对话框中，将值粘贴到 **Public key**（公有密钥）框中。

     1. 选择**添加**。

         Route 53 会将 DS 记录从公有密钥添加到父区域。例如，如果您的域是 `example.com`，则 DS 记录会添加到 .com DNS 区域。
   + 如果您的域托管在其他注册机构处，请按照**其他域名注册商**部分中的说明进行操作。

     为确保以下步骤顺利进行，请将低 DS TTL 引入父区域。如果您需要回滚更改，我们建议将 DS TTL 设置为 5 分钟（300 秒）以加快恢复速度。
     + 要建立子区域的信任链：

       如果您的父区域由其他注册表管理，请联系注册商以引入区域的 DS 记录。通常无法调整 DS 记录的 TTL。
     + 如果您的父区域托管在 Route 53 上，请联系父区域拥有者以引入区域的 DS 记录。

       将 `$ds_record_value` 提供给父区域拥有者。您可以通过单击 “**查看信息” 在控制台中创建 DS 记录**并复制 D **S 记录**字段，或者调用 [getDNSSec](https://docs.amazonaws.cn/Route53/latest/APIReference/API_GetDNSSEC.html) API 并检索 “” 字段的值来获取它：DSRecord

       ```
       aws --region us-east-1 route53 get-dnssec 
                   --hosted-zone-id $hostedzone_id
       ```

       父区域拥有者可以通过 Route 53 控制台或 CLI 插入记录。
       +  要使用插入 DS 记录 Amazon CLI，父区域所有者创建并命名了一个类似于以下示例的 JSON 文件。父区域拥有者可能会将文件命名为 `inserting_ds.json`。

         ```
         {
             "HostedZoneId": "$parent_zone_id",
             "ChangeBatch": {
                 "Comment": "Inserting DS for zone $zone_name",
                 "Changes": [
                     {
                         "Action": "UPSERT",
                         "ResourceRecordSet": {
                             "Name": "$zone_name",
                             "Type": "DS",
                             "TTL": 300,
                             "ResourceRecords": [
                                 {
                                     "Value": "$ds_record_value"
                                 }
                             ]
                         }
                     }
                 ]
             }
         }
         ```

         然后运行以下命令：

         ```
         aws --region us-east-1 route53 change-resource-record-sets 
                     --cli-input-json file://inserting_ds.json
         ```
       + 要使用控制台插入 DS 记录，

         打开 Route 53 控制台，网址为[https://console.aws.amazon.com/route53/](https://console.amazonaws.cn/route53/)。

         在导航窗格中，选择 **Hosted zones**（托管区域）、托管区域的名称，然后选择 **Create record**（创建记录）按钮。确保为 **Routing policy**（路由策略）选择简单路由。

         在**记录名称**字段中输入与 `$zone_name` 相同的名称，从**记录类型**下拉菜单中选择 DS，并在**值**字段中输入 `$ds_record_value` 的值，然后选择**创建记录**。

   **回滚：**从父区域中删除 DS，等待 DS TTL，然后回滚建立信任的步骤。如果父区域托管在 Route 53 上，父区域拥有者可以将 JSON 文件中的 `Action` 从 `UPSERT` 更改为 `DELETE`，然后重新运行上面的示例 CLI。

1. 等待更新传播，具体基于域记录的 TTL。

   如果父区域使用的是 Route 53 DNS 服务，则父区域所有者可以通过 [GetChange](https://docs.amazonaws.cn/Route53/latest/APIReference/API_GetChange.html)API 确认完全传播。

   否则，您可以定期检查 DS 记录的父区域，然后再等 10 分钟，以提高完整传播 DS 记录插入的可能性。请注意，一些注册商计划了 DS 插入，例如，每天一次。

在父区域中引入委派签名者 (DS) 记录时，已获取 DS 的经验证的解析程序将开始验证来自该区域的响应。

为了确保建立信任的步骤顺利进行，请完成以下操作：

1. 找到最大 NS TTL。

   有 2 组 NS 记录与您的区域相关：
   + 委托 NS 记录 — 这是由父区域持有的您的区域的 NS 记录。您可以通过运行如下 Unix 命令找到此记录（如果区域为 example.com，则父区域为 com）：

     `dig -t NS com`

     选择一个 NS 记录，然后运行以下命令：

     `dig @one of the NS records of your parent zone -t NS example.com`

     例如：

     `dig @b.gtld-servers.net. -t NS example.com`
   + 区内 NS 记录 — 这是您的区域中的 NS 记录。您可以通过运行以下 Unix 命令找到此记录：

     `dig @one of the NS records of your zone -t NS example.com`

     例如：

     `dig @ns-0000.awsdns-00.co.uk. -t NS example.com`

     请注意两个区域的最大 TTL。

1. 等待最大 NS TTL。

   在 DS 插入之前，解析程序获得签名响应，但未验证签名。插入 DS 记录后，在区域的 NS 记录到期之前，解析程序无法看到该记录。当解析程序重新获取 NS 记录时，也将会返回 DS 记录。

   如果您的客户在时钟不同步的主机上运行解析程序，请确保时钟与正确时间相差 1 小时以内。

   完成此步骤后，所有 DNSSEC 感知解析程序将会验证您的区域。

1. 注意名称解析。

   应注意解析程序验证您的区域时没有出现问题。确保同时考虑到客户向您报告问题所需的时间。

   我们建议监控最长 2 周时间。

1. （可选）加长 DS 和 N TTLs S 的长度。

   如果对设置满意，可以保存所做的 TTL 和 SOA 更改。请注意，Route 53 将已签名区域的 TTL 限制为 1 周。有关更多信息，请参阅 [在 Amazon Route 53 中配置 DNSSEC 签名](dns-configuring-dnssec.md)。

   如果您可以更改 DS TTL，建议将其设置为 1 小时。