

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

# 在 Amazon SES 中使用 DKIM 对电子邮件进行身份验证
<a name="send-email-authentication-dkim"></a>

DomainKeys *Identified *Mail* (DKIM*) 是一种电子邮件安全标准，旨在确保声称来自特定域名的电子邮件确实得到了该域名所有者的授权。其使用公有密钥加密技术通过私有密钥对电子邮件进行签名。然后，收件人服务器就可以使用发布到域 DNS 的公有密钥来验证电子邮件的各个部分在传输过程中未被修改。

DKIM 签名为可选项。您可决定使用 DKIM 签名为您的电子邮件签名，以通过符合 DKIM 的电子邮件提供商提高送达率。Amazon SES 提供三种使用 DKIM 签名为您的邮件签名的选项：
+ **Easy DKIM**：SES 生成公有/私有密钥对，并自动将 DKIM 签名添加到您通过该身份发送的每封邮件，请参阅[Amazon SES 中的 Easy DKIM](send-email-authentication-dkim-easy.md)。
+ D@@ **eterministic Easy DKIM (DEED)**： AWS 区域 通过创建副本身份，自动继承 DKIM 签名属性的副本身份作为使用 Easy DKIM 的父身份，使您能够在多个之间保持一致的 DKIM 签名，请参阅。[在 Amazon SES 中使用 Deterministic Easy DKIM（DEED）](send-email-authentication-dkim-deed.md)
+ **BYODKIM（自带 DKIM）**：您提供自己的公有/私有密钥对，而 SES 将 DKIM 签名添加到您通过该身份发送的每封邮件，请参阅[提供 Amazon SES 中您自己的 DKIM 身份验证令牌 (BYODKIM)](send-email-authentication-dkim-bring-your-own.md)。
+ **手动添加 DKIM 签名**：您将自己的 DKIM 签名添加到使用 `SendRawEmail` API 发送的电子邮件，请参阅[Amazon SES 中的手动 DKIM 签名](send-email-authentication-dkim-manual.md)。

## DKIM 签名密钥长度
<a name="send-email-authentication-dkim-1024-2048"></a>

由于许多 DNS 提供商现在完全支持 DKIM 2048 位 RSA 加密，Amazon SES 还支持 DKIM 2048 以允许对电子邮件进行更安全的身份验证，因此当您从 API 或控制台配置 Easy DKIM 时，请将其用作原定设置的密钥长度。2048 位密钥也可以在自带 DKIM (BYODKIM) 中设置和使用，其中您的签名密钥长度必须至少为 1024 位，但不超过 2048 位。

为了安全和电子邮件的送达率，当使用 Easy DKIM 配置时，您可以选择使用 1024 和 2048 位密钥长度，并且在任何 DNS 提供商仍不支持 2048 位导致问题时，可以灵活地返回到 1024 位。*创建新身份时，除非指定 1024 位，否则默认情况下将使用 DKIM 2048 创建身份。*

为了保持传输中电子邮件的送达率，您可以更改 DKIM 密钥长度的频率将受到限制。这些限制包括：
+ 无法切换到与已配置的密钥长度相同的密钥长度。
+ 无法在 24 小时内多次切换到不同的密钥长度（除非这是该时间段内第一次降级到 1024 位）。

当您的电子邮件在传输过程中时，DNS 会使用您的公有密钥验证您的电子邮件；因此，如果您更改密钥过快或频繁，DNS 可能无法对您的电子邮件进行 DKIM 身份验证，因为前一个密钥可能已失效，因此，这些限制可防止出现这种情况。

## DKIM 注意事项
<a name="send-email-authentication-dkim-easy-considerations"></a>

当您使用 DKIM 对电子邮件进行身份验证时，以下规则适用：
+ 您只需为在“发件人”地址中使用的域设置 DKIM。您无需为在“退回路径”或“回复对象”地址中使用的域设置 DKIM。
+ Amazon SES 已在多个 AWS 地区推出。如果您使用多个 AWS 区域发送电子邮件，则必须在每个区域中都完成 DKIM 设置过程才能确保您的所有电子邮件都进行 DKIM 签名。
+ 由于从父域继承 DKIM 属性，当您通过 DKIM 身份验证验证域时：
  + DKIM 身份验证会应用到该域的全部子域。
    + 如果您不希望子域使用 DKIM 身份验证，子域的 DKIM 设置可以通过禁用集成以及在未来重新启用的功能覆盖父域的设置。
  + DKIM 身份验证还将应用于由在其地址中引用 DKIM 已验证域的电子邮件身份发出的全部电子邮件。
    + 如果您想要发送电子邮件而不使用 DKIM 身份验证，电子邮件地址的 DKIM 设置可以通过禁用集成以及在未来重新启用的功能覆盖子域的设置（若适用）。

## 了解继承的 DKIM 签名属性
<a name="dkim-easy-setup-email-key-points"></a>

重要的是，首先要理解，如果域配置了 DKIM，无论使用的是 Easy DKIM 还是 BYODKIM，电子邮件地址标识都会从其父域继承其 DKIM 签名属性。因此，在电子邮件地址标识上禁用或启用 DKIM 签名实际上是基于以下关键事实覆盖域的 DKIM 签名属性：
+ 如果您已为电子邮件地址所属于的域设置了 DKIM，则无需再为电子邮件地址设置 DKIM。
  + 在为域设置 DKIM 时，Amazon SES 通过从父域继承的 DKIM 属性，自动认证来自该域上每个地址的每一封邮件。
+ 特定电子邮件地址标识的 DKIM 设置*自动覆盖地址所属的父域或子域（如适用）*的设置。

由于电子邮件地址身份的 DKIM 签名属性是从父域继承的，因此如果您计划覆盖这些属性，则必须记住覆盖的层次规则，如下表所述。

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/ses/latest/dg/send-email-authentication-dkim.html)

通常不建议禁用您的 DKIM 签名，因为这有可能损害您的发件人声誉，并且会增加您发送的邮件转到垃圾邮件或垃圾邮件文件夹或域名被欺骗的风险。

但是，对于任何特定的使用情形或外围业务决策，可以覆盖电子邮件地址标识上的域继承的 DKIM 签名属性，您可能必须永久或临时禁用 DKIM 签名，或者在以后重新将其启用。请参阅[覆盖在电子邮件地址身份上继承的 DKIM 签名](send-email-authentication-dkim-easy-managing.md#send-email-authentication-dkim-easy-setup-email)。

# Amazon SES 中的 Easy DKIM
<a name="send-email-authentication-dkim-easy"></a>

为域身份设置 Easy DKIM 后，Amazon SES 会自动向您从该身份发送的每封电子邮件添加一个 2048 位的 DKIM 密钥。您可使用 Amazon SES 控制台或者使用 API 来配置 Easy DKIM。

**注意**  
要设置 Easy DKIM，您必须修改域的 DNS 设置。如果您使用 Route 53 作为 DNS 提供商，Amazon SES 可以自动为您创建适当的记录。如果您使用其他 DNS 提供商，请参阅您的提供商的文档来了解有关为您的域更改 DNS 设置的更多信息。

**警告**  
如果您当前启用了 BYODKIM 并且正在迁移到 Easy DKIM，请注意，在设置 Easy DKIM 且您的 DKIM 状态处于待定状态时，Amazon SES 不会使用 BYODKIM 对您的电子邮件进行签名。从您进行调用以启用 Easy DKIM（通过 API 或控制台）的那一刻到 SES 可以确认 DNS 配置的那一刻之间，SES 可能会在没有 DKIM 签名的情况下发送您的电子邮件。因此，建议使用中间步骤从一种 DKIM 签名方法迁移到另一种（例如，使用启用了 BYODKIM 的域的子域，然后在 Easy DKIM 验证通过后将其删除），或者在应用程序停机期间（如果有）执行此活动。

## 为已验证的域身份设置 Easy DKIM
<a name="send-email-authentication-dkim-easy-setup-domain"></a>

此部分的过程经过简化，旨在展示在您已创建的域身份上配置 Easy DKIM 所需的步骤。如果您尚未创建域身份，或要查看用于自定义域身份的全部可用选项，如使用原定设置配置集、自定义 MAIL FROM 域和标签等，请参阅[创建域身份](creating-identities.md#verify-domain-procedure)。

创建 Easy DKIM 域身份中有一段是配置其基于 DKM 的验证，您可以选择接受 2048 位的 Amazon SES 原定设置值，或选择 1024 位覆盖默认值。有关 DKIM 签名密钥长度以及如何更改密钥长度的详情，请参阅 [DKIM 签名密钥长度](send-email-authentication-dkim.md#send-email-authentication-dkim-1024-2048)。

**为域设置 Easy DKIM**

1. 登录 AWS 管理控制台 并打开 Amazon SES 控制台，网址为[https://console.aws.amazon.com/ses/](https://console.aws.amazon.com/ses/)。

1. 在导航窗格中的**配置**下，选择**身份**。

1. 在身份列表中，选择**身份类型**为*域*的身份。
**注意**  
如果需要创建或验证域，请参阅 [创建域身份](creating-identities.md#verify-domain-procedure)。

1. 在 “**身份验证**” 选项卡下的 “**DomainKeys已识别邮件 (DKIM)**” 容器中，选择 “**编辑”**。

1. 在**高级 DKIM 设置**容器中，选择**身份类型**字段中的 **Easy DKIM** 按钮。

1. 在 **DKIM 签名密钥长度**字段中，选择 [**RSA\$12048\$1BIT** 或 **RSA\$11024\$1BIT**](send-email-authentication-dkim.md#send-email-authentication-dkim-1024-2048)。

1. 在 **DKIM 签名**字段中，选中**已启用**复选框。

1. 选择 **Save changes**（保存更改）。

1. 在使用 Easy DKIM 配置您的域身份以后，必须与您的 DNS 提供商完成验证过程 - 继续转到[与您的 DNS 提供商一起验证 DKIM 域身份](creating-identities.md#just-verify-domain-proc)并执行适用于 Easy DKIM 的 DNS 身份验证过程。

## 更改身份的 Easy DKIM 签名密钥长度
<a name="send-email-authentication-dkim-easy-managing-change-key-length"></a>

本部分中的流程展示了如何轻松更改签名算法所需的 Easy DKIM 位数。虽然始终首选 2048 位签名长度，以提供增强安全性，但在某些情况下，也可能需要使用 1024 位长度，例如必须使用仅支持 DKIM 1024 的 DNS 提供商。

为了保持传输中电子邮件的送达率，您可以更改或改回 DKIM 密钥长度的频率将受到限制。

当您的电子邮件在传输过程中时，DNS 会使用您的公有密钥验证您的电子邮件；因此，如果您更改密钥过快或频繁，DNS 可能无法对您的电子邮件进行 DKIM 身份验证，因为前一个密钥可能已失效，因此，以下限制可防止出现这种情况：
+ 无法切换到与已配置的密钥长度相同的密钥长度。
+ 无法在 24 小时内多次切换到不同的密钥长度（除非这是该时间段内第一次降级到 1024 位）。

在使用以下过程更改密钥长度时，如果您违反了其中一项限制，控制台将返回一个错误条，指出*您提供的输入无效*，并说明其无效的原因。

**更改 DKIM 签名密钥长度位数的步骤**

1. 登录 AWS 管理控制台 并打开 Amazon SES 控制台，网址为[https://console.aws.amazon.com/ses/](https://console.aws.amazon.com/ses/)。

1. 在导航窗格中的 **Configuration**（配置）下，选择 **Verified identities**（已验证身份）。

1. 在身份列表中，选择要更改其 DKIM 签名密钥长度的身份。

1. 在 “**身份验证**” 选项卡下的 “**DomainKeys已识别邮件 (DKIM)**” 容器中，选择 “**编辑”**。

1. 在**高级 DKIM 设置**容器中，选择 **DKIM 签名密钥长度**字段中的 [**RSA\$12048\$1BIT** 或 **RSA\$11024\$1BIT**](send-email-authentication-dkim.md#send-email-authentication-dkim-1024-2048)。

1. 选择 **Save changes**（保存更改）。

# 在 Amazon SES 中使用 Deterministic Easy DKIM（DEED）
<a name="send-email-authentication-dkim-deed"></a>

Deterministic Easy DKIM (DEED) 为管理多个 DKIM 配置提供了一种解决方案。 AWS 区域通过简化 DNS 管理并确保一致的 DKIM 签名，DEED 帮助您简化多区域电子邮件发送操作，同时保持强大的电子邮件身份验证实践。

## 什么是 Deterministic Easy DKIM（DEED）？
<a name="what-is-deed"></a>

[Deterministic Easy DKIM (DEED) 是一项功能，它 AWS 区域 基于配置了 Easy DKIM 的父域在所有域中生成一致的 DKIM 令牌。](send-email-authentication-dkim-easy.md)这使您可以复制不同身份 AWS 区域 ，这些身份会自动继承和维护与当前使用 Easy DKIM 配置的父身份相同的 DKIM 签名配置。使用 DEED，您只需要为父身份发布一次 DNS 记录，副本身份将使用相同的 DNS 记录来验证域所有权和管理 DKIM 签名。

通过简化 DNS 管理并确保一致的 DKIM 签名，DEED 帮助您简化多区域电子邮件发送操作，同时保持最佳的电子邮件身份验证实践。

讨论 DEED 时使用的术语：
+ **父身份**：一个配置了 Easy DKIM 的已验证身份，用作副本身份 DKIM 配置的源。
+ **副本身份**：父身份的副本，共享相同的 DNS 设置和 DKIM 签名配置。
+ **父区域**：设置父身份的 AWS 区域 。
+ **副本区域**：设置副本身份的 AWS 区域 。
+ **DEED 身份**：任何用作父身份或副本身份的身份。（当创建新身份时，它最初被视为常规（非 DEED）身份。但是，一旦创建了副本，该身份就被视为 DEED 身份。）

使用 DEED 的主要好处包括：
+ **简化的 DNS 管理**：仅为父身份发布一次 DNS 记录。
+ **更轻松的多区域操作**：简化将电子邮件发送操作扩展到新区域的过程。
+ **减少管理开销**：从父身份集中管理 DKIM 配置。

## Deterministic Easy DKIM（DEED）的工作原理
<a name="how-deed-works"></a>

当您创建副本身份时，Amazon SES 会自动将 DKIM 签名密钥从父身份复制到副本身份。对父身份进行的任何后续 DKIM 密钥轮换或密钥长度更改都会自动传播到所有副本身份。

该过程涉及以下工作流程：

1.  AWS 区域 使用 Easy DKIM 在中创建家长身份。

1. 设置父身份所需的 DNS 记录。

1. 在其他中创建副本身份 AWS 区域，指定父身份的域名和 DKIM 签名区域。

1. Amazon SES 自动将父级的 DKIM 配置复制到副本身份。

重要注意事项：
+ 您不能创建已经是副本的身份的副本。
+ 父身份必须启用 [Easy DKIM](send-email-authentication-dkim-easy.md)：您不能创建 BYODKIM 或手动签名身份的副本。
+ 在删除所有副本身份之前，无法删除父身份。

## 使用 DEED 设置副本身份
<a name="setting-up-replica-identity"></a>

本节将提供示例，向您展示如何使用 DEED 创建和验证副本身份以及所需的必要权限。

**Topics**
+ [创建副本身份](#creating-replica-identity)
+ [验证副本身份配置](#verifying-replica-identity)
+ [使用 DEED 所需的权限](#required-permissions)

### 创建副本身份
<a name="creating-replica-identity"></a>

要创建副本身份：

1. 在要创建副本身份的 AWS 区域 位置中，打开 SES 控制台，网址为[https://console.aws.amazon.com/ses/](https://console.aws.amazon.com/ses/)。

   （在 SES 控制台中，副本身份被称为*全局身份*。）

1. 在导航窗格中，选择**身份**。

1. 选择**创建身份**。

1. 在**身份类型**下选择**域**，并输入您要复制并作为父身份的配置了 Easy DKIM 的现有身份的域名。

1. 展开**高级 DKIM 设置**并选择 **Deterministic Easy DKIM**。

1. 从**父区域**下拉菜单中，选择一个父区域，其中存在与您为全局（副本）身份输入的名称相同的、经过 Easy DKIM 签名的身份。（您的副本区域默认为您登录 SES 控制台时所在的区域。）

1. 确保已启用 **DKIM 签名**。

1. （可选）向您的域身份添加一个或多个**标签**。

1. 查看配置并选择**创建身份**。

使用 AWS CLI：

要基于配置了 Easy DKIM 的父身份创建副本身份，您需要指定父级的域名、您要创建副本身份的区域以及父级的 DKIM 签名区域，如本例所示：

```
aws sesv2 create-email-identity --email-identity example.com --region us-west-2 --dkim-signing-attributes '{"DomainSigningAttributesOrigin": "AWS_SES_US_EAST_1"}'
```

在上述示例中：

1. *example.com*替换为正在复制的父域身份。

1. *us-west-2*替换为要创建副本域身份的区域。

1. *AWS\$1SES\$1US\$1EAST\$11*替换为父级的 DKIM 签名区域，该区域代表其 Easy DKIM 签名配置，该配置将被复制到副本身份。
**注意**  
前`AWS_SES_`缀表示 DKIM 是使用 Easy DKIM 为父身份配置`US_EAST_1`的，也是它的 AWS 区域 创建位置。

### 验证副本身份配置
<a name="verifying-replica-identity"></a>

创建副本身份后，您可以验证它是否已使用父身份的 DKIM 签名配置正确配置。

**要验证副本身份，请执行以下操作：**

1. 在创建副本身份 AWS 区域 的位置，打开 SES 控制台，网址为[https://console.aws.amazon.com/ses/](https://console.aws.amazon.com/ses/)。

1. 在导航窗格中，选择**身份**，然后从**身份**表中选择要验证的身份。

1. 在**身份验证**选项卡下，**DKIM 配置**字段将指示状态，而**父区域**字段将指示该身份使用 DEED 进行 DKIM 签名配置的区域。

使用 AWS CLI：

使用 `get-email-identity` 命令，指定副本的域名和区域：

```
aws sesv2 get-email-identity --email-identity example.com --region us-west-2
```

响应将在 `SigningAttributesOrigin` 参数中包含父区域的值，表示副本身份已成功配置了父身份的 DKIM 签名配置：

```
{
  "DkimAttributes": {
    "SigningAttributesOrigin": "AWS_SES_US_EAST_1"
  }
}
```

### 使用 DEED 所需的权限
<a name="required-permissions"></a>

要使用 DEED，您需要：

1. 在副本区域创建电子邮件身份的标准权限。

1. 从父区域复制 DKIM 签名密钥的权限。

#### DKIM 复制的示例 IAM 策略
<a name="example-iam-policy"></a>

以下策略允许从父身份到指定副本区域的 DKIM 签名密钥复制：

------
#### [ JSON ]

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Sid": "AllowDKIMReplication",
      "Effect": "Allow",
      "Action": "ses:ReplicateEmailIdentityDKIMSigningKey",
      "Resource": "arn:aws:ses:us-east-1:123456789124:identity/example.com",
      "Condition": {
        "ForAllValues:StringEquals": {
           "ses:ReplicaRegion": ["us-east-1", "us-east-1"]
        }
      }
    }
  ]
}
```

------

## 最佳实践
<a name="deed-best-practices"></a>

推荐以下最佳实践：
+ **规划您的父区域和副本区域**：仔细考虑您选择的父区域，因为它将是副本区域中使用的 DKIM 配置的真实来源。
+ **使用一致的 IAM 策略**：确保您的 IAM 策略允许在所有目标区域进行 DKIM 复制。
+ **保持父身份活跃**：请记住，您的副本身份继承了父身份的 DKIM 签名配置，由于这种依赖性，在删除所有副本身份之前，您无法删除父身份。

## 问题排查
<a name="troubleshooting"></a>

如果您遇到 DEED 问题，请考虑以下事项：
+ **验证错误**：确保您具有 DKIM 复制所需的必要权限。
+ **复制延迟**：允许一些时间让复制完成，尤其是在创建新副本身份时。
+ **DNS 问题**：验证父身份的 DNS 记录是否正确设置和传播。

# 提供 Amazon SES 中您自己的 DKIM 身份验证令牌 (BYODKIM)
<a name="send-email-authentication-dkim-bring-your-own"></a>

作为使用 [Easy DKIM](send-email-authentication-dkim-easy.md) 的替代方法，您可以改为使用自己的公有-私有密钥对配置 DKIM 身份验证。此过程称为*自带 DKIM*（*BYODKIM*）。

使用 BYODKIM，可以使用单个 DNS 记录为您的域配置 DKIM 身份验证，而不是使用 Easy DKIM，后者要求您发布三个单独的 DNS 记录。此外，使用 BYODKIM，您可以根据需要经常为您的域轮换 DKIM 密钥。

**Topics**
+ [步骤 1：创建密钥对](#send-email-authentication-dkim-bring-your-own-create-key-pair)
+ [步骤 2：将选择器和公有密钥添加到 DNS 提供商的域配置中](#send-email-authentication-dkim-bring-your-own-update-dns)
+ [步骤 3：配置并验证域以使用 BYODKIM](#send-email-authentication-dkim-bring-your-own-configure-identity)

**警告**  
如果您当前启用了 Easy DKIM 并且正在迁移到 BYODKIM，请注意，在设置 BYODKIM 且您的 DKIM 状态处于待定状态时，Amazon SES 将不会使用 Easy DKIM 对您的电子邮件签名。从您进行调用以启用 BYODKIM（通过 API 或控制台）的那一刻到 SES 可以确认 DNS 配置的那一刻之间，SES 可能会在没有 DKIM 签名的情况下发送您的电子邮件。因此，建议使用中间步骤从一种 DKIM 签名方法迁移到另一种（例如，使用启用了 Easy DKIM 的域的子域，然后在 BYODKIM 验证通过后将其删除），或者在应用程序停机期间（如果有）执行此活动。

## 步骤 1：创建密钥对
<a name="send-email-authentication-dkim-bring-your-own-create-key-pair"></a>

要使用自带 DKIM 功能，您需要先创建 RSA 密钥对。

生成的私有密钥必须为 PKCS \$11 或 PKCS \$18 两种格式之一，使用至少 1024 位 RSA 加密（至多 2048 位），并使用 base64[（PEM）](https://en.wikipedia.org/wiki/Privacy-Enhanced_Mail)编码进行编码。有关 DKIM 签名密钥长度以及如何更改密钥长度的详情，请参阅 [DKIM 签名密钥长度](send-email-authentication-dkim.md#send-email-authentication-dkim-1024-2048)。

**注意**  
您可以使用第三方应用程序和工具生成 RSA 密钥对，只要私有密钥是使用至少 1024 位 RSA 加密（至多 2048 位）生成并使用 base64 [(PEM)](https://en.wikipedia.org/wiki/Privacy-Enhanced_Mail) 编码进行编码的。

在以下过程中，使用大多数 Linux、macOS 或 Unix 操作系统中内置的 `openssl genrsa` 命令创建密钥对的示例代码将自动使用 base64 [(PEM)](https://en.wikipedia.org/wiki/Privacy-Enhanced_Mail) 编码。

**使用 Linux、macOS 或 Unix 命令行来创建密钥对**

1. 在命令行中，输入以下命令生成私钥，*nnnn*替换为至少为 1024 且最多 2048 的位长度：

   ```
   openssl genrsa -f4 -out private.key nnnn
   ```

1. 在命令行中，输入以下命令可生成公有密钥：

   ```
   openssl rsa -in private.key -outform PEM -pubout -out public.key
   ```

## 步骤 2：将选择器和公有密钥添加到 DNS 提供商的域配置中
<a name="send-email-authentication-dkim-bring-your-own-update-dns"></a>

现在您已创建密钥对，您必须将公有密钥作为 TXT 记录添加到您的域的 DNS 配置中。

**将公有密钥添加到您的域的 DNS 配置中**

1. 登录您的 DNS 提供商或托管提供商的管理控制台。

1. 将新的文本记录添加到您的域的 DNS 配置中。记录应该使用以下格式：    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/ses/latest/dg/send-email-authentication-dkim-bring-your-own.html)

   在前面的示例中，进行以下更改：
   + *selector*替换为标识密钥的唯一名称。
**注意**  
少数 DNS 提供商不允许记录名称中包含下划线 (\$1)。但是，DKIM 记录名称中的下划线是必需的。如果您的 DNS 提供商不允许您在记录名称中输入下划线，请联系提供商的客户支持团队以获取帮助。
   + *example.com*用您的域名替换。
   + *yourPublicKey*替换为您之前创建的公钥，并添加`p=`前缀，如上面的 “*值*” 列所示。
**注意**  
当您将公有密钥发布（添加）到 DNS 提供商时，必须按如下所示进行格式化：  
您必须删除生成的公有密钥的第一行和最后一行（分别为 `-----BEGIN PUBLIC KEY-----` 和 `-----END PUBLIC KEY-----`）。此外，您还必须删除生成的公有密钥中的换行符。产生的值是一个字符串，不包含空格或换行符。
您必须包含 `p=` 前缀，如上表中的 *Value*（值）列所示。

   不同的提供商具有不同的 DNS 记录更新过程。下表包含的链接指向几个广泛使用的 DNS 提供商的文档。此列表并不详尽无遗，也不表示认可；同样，如果您的 DNS 提供商未列出，这并不意味着您不能将该域与 Amazon SES 一起使用。    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/ses/latest/dg/send-email-authentication-dkim-bring-your-own.html)

## 步骤 3：配置并验证域以使用 BYODKIM
<a name="send-email-authentication-dkim-bring-your-own-configure-identity"></a>

您可以使用控制台或 AWS CLI为新域（即当前不用于通过 Amazon SES 发送电子邮件的域）以及现有域（即您已设置为与 Amazon SES 一起使用的域）设置 BYODKIM。在使用本节中的 AWS CLI 步骤之前，必须首先安装和配置 AWS CLI。有关更多信息，请参阅《[AWS Command Line Interface 用户指南》](https://docs.aws.amazon.com/cli/latest/userguide/)。

### 选项 1：创建使用 BYODKIM 的新域身份
<a name="send-email-authentication-dkim-bring-your-own-configure-identity-new-domain"></a>

此部分包含用于创建使用 BYODKIM 的新域身份的过程。新域身份是您之前尚未设置为使用 Amazon SES 发送电子邮件的域。

如果要配置现有域以使用 BYODKIM，请改为完成 [选项 2：配置现有域身份](#send-email-authentication-dkim-bring-your-own-configure-identity-existing-domain) 中的过程。

**从控制台使用 BYODKIM 创建身份**
+ 按照[创建域身份](creating-identities.md#verify-domain-procedure)中的过程操作，当您到达步骤 8 时，请按照 BYODKIM 特定的说明进行操作。

**要使用 BYODKIM 创建身份，请访问 AWS CLI**

要配置新域，请使用 Amazon SES API 中的 `CreateEmailIdentity` 操作。

1. 在文本编辑器中，粘贴以下代码：

   ```
   {
       "EmailIdentity":"example.com",
       "DkimSigningAttributes":{
           "DomainSigningPrivateKey":"privateKey",
           "DomainSigningSelector":"selector"
       }
   }
   ```

   在前面的示例中，进行以下更改：
   + *example.com*替换为您要创建的域。
   + *privateKey*用您的私钥替换。
**注意**  
您必须删除生成的私有密钥的第一行和最后一行（分别为 `-----BEGIN PRIVATE KEY-----` 和 `-----END PRIVATE KEY-----`）。此外，还必须删除生成的私有密钥中的换行符。产生的值是一个字符串，不包含空格或换行符。
   + *selector*替换为您在域名的 DNS 配置中创建 TXT 记录时指定的唯一选择器。

   完成后，将文件另存为 `create-identity.json`。

1. 在命令行输入以下命令：

   ```
   aws sesv2 create-email-identity --cli-input-json file://path/to/create-identity.json
   ```

   在前面的命令中，*path/to/create-identity.json*替换为您在上一步中创建的文件的完整路径。

### 选项 2：配置现有域身份
<a name="send-email-authentication-dkim-bring-your-own-configure-identity-existing-domain"></a>

此部分包含用于更新现有域身份以使用 BYODKIM 的过程。现有域身份是您已设置以使用 Amazon SES 发送电子邮件的域。

**从控制台使用 BYODKIM 更新域身份**

1. 登录 AWS 管理控制台 并打开 Amazon SES 控制台，网址为[https://console.aws.amazon.com/ses/](https://console.aws.amazon.com/ses/)。

1. 在导航窗格中的 **Configuration**（配置）下，选择 **Verified identities**（已验证身份）。

1. 在身份列表中，选择**身份类型**为*域*的身份。
**注意**  
如果需要创建或验证域，请参阅 [创建域身份](creating-identities.md#verify-domain-procedure)。

1. 在 “**身份验证**” 选项卡下的 “**DomainKeys 已识别邮件 (DKIM)**” 窗格中，选择 “**编辑”**。

1. 在 **Advanced DKIM settings**（高级 DKIM 设置）窗格中，选择 **Identity type**（身份类型）字段中的 **Provide DKIM authentication token (BYODKIM)** [提供 DKIM 身份验证令牌 (BYODKIM)] 按钮。

1. 对于 **Private key**（私有密钥），粘贴先前生成的私有密钥。
**注意**  
您必须删除生成的私有密钥的第一行和最后一行（分别为 `-----BEGIN PRIVATE KEY-----` 和 `-----END PRIVATE KEY-----`）。此外，还必须删除生成的私有密钥中的换行符。产生的值是一个字符串，不包含空格或换行符。

1. 对于**选择器名称**，输入您在域的 DNS 设置中指定的选择器的名称。

1. 在 **DKIM 签名**字段中，选中**已启用**复选框。

1. 选择**保存更改**。

**要使用 BYODKIM 更新域身份，请访问 AWS CLI**

要配置现有域，请使用 Amazon SES API 中的 `PutEmailIdentityDkimSigningAttributes` 操作。

1. 在文本编辑器中，粘贴以下代码：

   ```
   {
       "SigningAttributes":{
           "DomainSigningPrivateKey":"privateKey",
           "DomainSigningSelector":"selector"
       },
       "SigningAttributesOrigin":"EXTERNAL"
   }
   ```

   在前面的示例中，进行以下更改：
   + *privateKey*用您的私钥替换。
**注意**  
您必须删除生成的私有密钥的第一行和最后一行（分别为 `-----BEGIN PRIVATE KEY-----` 和 `-----END PRIVATE KEY-----`）。此外，还必须删除生成的私有密钥中的换行符。产生的值是一个字符串，不包含空格或换行符。
   + *selector*替换为您在域名的 DNS 配置中创建 TXT 记录时指定的唯一选择器。

   完成后，将文件另存为 `update-identity.json`。

1. 在命令行输入以下命令：

   ```
   aws sesv2 put-email-identity-dkim-signing-attributes --email-identity example.com --cli-input-json file://path/to/update-identity.json
   ```

   在前面的命令中，进行以下更改：
   + *path/to/update-identity.json*替换为您在上一步中创建的文件的完整路径。
   + *example.com*替换为您要更新的域名。

### 验证使用 BYODKIM 的域的 DKIM 状态
<a name="send-email-authentication-dkim-bring-your-own-configure-identity-check"></a>

**从控制台验证域的 DKIM 状态**

配置域以使用 BYODKIM 后，您可以使用 SES 控制台验证已正确地配置 DKIM。

1. 登录 AWS 管理控制台 并打开 Amazon SES 控制台，网址为[https://console.aws.amazon.com/ses/](https://console.aws.amazon.com/ses/)。

1. 在导航窗格中的**配置**下，选择**已验证身份**。

1. 在身份列表中，选择要验证其 DKIM 状态的身份。

1. 对 DNS 设置的更改最长可能需要 72 小时才能生效。一旦 Amazon SES 在域的 DNS 设置中检测到全部必需的 DKIM 记录，则验证过程完成。如果所有配置都正确，则您的域名的 **DKIM 配置**字段将在已**DomainKeys识别邮件 (DKIM)** 窗格中显示**成功**，而**身份状态**字段在 “**摘要**” 窗格中显示**已验证**。

**要验证域名的 DKIM 状态，请使用 AWS CLI**

将域配置为使用 BYODKIM 后，您可以使用该 GetEmailIdentity操作来验证 DKIM 的配置是否正确。
+ 在命令行输入以下命令：

  ```
  aws sesv2 get-email-identity --email-identity example.com
  ```

  在前面的命令中，*example.com*用您的域名替换。

  此命令返回一个 JSON 对象，该对象包含类似于以下示例的部分。

  ```
  {
      ...
      "DkimAttributes": { 
          "SigningAttributesOrigin": "EXTERNAL",
          "SigningEnabled": true,
          "Status": "SUCCESS",
          "Tokens": [ ]
      },
      ...
  }
  ```

  如果以下所有条件均成立，则表示已为域正确配置 BYODKIM：
  + `SigningAttributesOrigin` 属性的值为 `EXTERNAL`。
  + `SigningEnabled` 的值为 `true`。
  + `Status` 的值为 `SUCCESS`。

# 管理 Easy DKIM 和 BYODKIM
<a name="send-email-authentication-dkim-easy-managing"></a>

使用基于 Web 的 Amazon SES 控制台或 Amazon SES API，您可以为已通过 Easy DKIM 或 BYODKIM 验证的身份管理 DKIM 设置。您可以使用其中任一方法来获取身份的 DKIM 记录，或者为身份启用或禁用 Easy DKIM 签名。

## 获取身份的 DKIM 记录
<a name="send-email-authentication-dkim-easy-managing-obtain-records"></a>

您可以随时使用 Amazon SES 控制台获取您的域或电子邮件地址的 DKIM 记录。

**使用控制台获取身份的 DKIM 记录**

1. 登录 AWS 管理控制台 并打开 Amazon SES 控制台，网址为[https://console.aws.amazon.com/ses/](https://console.aws.amazon.com/ses/)。

1. 在导航窗格中的**配置**下，选择**已验证身份**。

1. 在身份列表中，选择要获取其 DKIM 记录的身份。

1. 在身份详细信息页面的**身份验证**选项卡上，展开**查看 DNS 记录**。

1. 复制在此部分显示的三条别名记录（如果您使用 Easy DKIM）或 TXT 记录（如果您使用 BYODKIM）。或者，您可以选择**下载 .csv 记录集**以将记录副本保存到您的电脑中。

   下图显示了展开后的 **View DNS records**（查看 DNS 记录）部分显示的与 Easy DKIM 关联的别名记录的示例。  
![\[\]](http://docs.aws.amazon.com/zh_cn/ses/latest/dg/images/dkim_existing_dns.png)

您还可以使用 Amazon SES API 来获取身份的 DKIM 记录。与 API 交互的常用方法是使用 AWS CLI。

**要获取身份的 DKIM 记录，请使用 AWS CLI**

1. 在命令行处，键入以下命令：

   ```
   aws ses get-identity-dkim-attributes --identities "example.com"
   ```

   在前面的示例中，*example.com*替换为您想要获取 DKIM 记录的身份。您可以指定电子邮件地址或域。

1. 此命令的输出包含一个 `DkimTokens` 部分，如以下示例所示：

   ```
   {
       "DkimAttributes": {
           "example.com": {
               "DkimEnabled": true,
               "DkimVerificationStatus": "Success",
               "DkimTokens": [
                   "hirjd4exampled5477y22yd23ettobi",
                   "v3rnz522czcl46quexamplek3efo5o6x",
                   "y4examplexbhyhnsjcmtvzotfvqjmdqoj"
               ]
           }
       }
   }
   ```

   您可以使用令牌创建添加到域的 DNS 设置中的 CNAME 记录。要创建 CNAME 记录，请使用以下模板：

   ```
   token1._domainkey.example.com CNAME token1.dkim.amazonses.com
   token2._domainkey.example.com CNAME token2.dkim.amazonses.com
   token3._domainkey.example.com CNAME token3.dkim.amazonses.com
   ```

   将的*token1*每个实例替换为您运行`get-identity-dkim-attributes`命令时收到的列表中的第一个标记，将的所有实例替换为列表中的第二个标记，并将的所有实例替换为列表中的第三个标记。*token2* *token3*

   例如，对上述示例中所示的令牌应用此模板会生成以下记录：

   ```
   hirjd4exampled5477y22yd23ettobi._domainkey.example.com CNAME hirjd4exampled5477y22yd23ettobi.dkim.amazonses.com
   v3rnz522czcl46quexamplek3efo5o6x._domainkey.example.com CNAME v3rnz522czcl46quexamplek3efo5o6x.dkim.amazonses.com
   y4examplexbhyhnsjcmtvzotfvqjmdqoj._domainkey.example.com CNAME y4examplexbhyhnsjcmtvzotfvqjmdqoj.dkim.amazonses.com
   ```

**注意**  
并非所有人都 AWS 区域 使用默认的 SES DKIM 域名，`dkim.amazonses.com`要查看您的地区是否使用特定区域的 DKIM 域，请查看中的 [DKIM 域名表](https://docs.aws.amazon.com/general/latest/gr/ses.html#ses_dkim_domains)。*AWS 一般参考*

## 为身份禁用 Easy DKIM
<a name="send-email-authentication-dkim-easy-managing-disabling"></a>

您可以使用 Amazon SES 控制台快速为身份禁用 DKIM 身份验证。

**为身份禁用 DKIM**

1. 登录 AWS 管理控制台 并打开 Amazon SES 控制台，网址为[https://console.aws.amazon.com/ses/](https://console.aws.amazon.com/ses/)。

1. 在导航窗格中的**配置**下，选择**已验证身份**。

1. 在身份列表中，选择要为其禁用 DKIM 的身份。

1. 在 “**身份验证**” 选项卡下的 “**DomainKeys已识别邮件 (DKIM)**” 容器中，选择 “**编辑”**。

1. 在 **Advanced DKIM settings**（高级 DKIM 设置）中，选中 **DKIM signatures**（DKIM 签名）字段中的 **Enabled**（已启用）复选框。

您还可以使用 Amazon SES API 为身份禁用 DKIM。与 API 交互的常用方法是使用 AWS CLI。

**要禁用身份的 DKIM，请使用 AWS CLI**
+ 在命令行处，键入以下命令：

  ```
  aws ses set-identity-dkim-enabled --identity example.com --no-dkim-enabled
  ```

  在前面的示例中，*example.com*替换为要禁用 DKIM 的身份。您可以指定电子邮件地址或域。

## 为身份启用 Easy DKIM
<a name="send-email-authentication-dkim-easy-managing-enabling"></a>

如果您之前为身份禁用了 DKIM，则可以使用 Amazon SES 控制台再次启用它。

**为身份启用 DKIM**

1. 登录 AWS 管理控制台 并打开 Amazon SES 控制台，网址为[https://console.aws.amazon.com/ses/](https://console.aws.amazon.com/ses/)。

1. 在导航窗格中的**配置**下，选择**已验证身份**。

1. 在身份列表中，选择要为其启用 DKIM 的身份。

1. 在 “**身份验证**” 选项卡下的 “**DomainKeys已识别邮件 (DKIM)**” 容器中，选择 “**编辑”**。

1. 在**高级 DKIM 设置**中，选中 **DKIM 签名**字段中的**已启用**复选框。

您还可以使用 Amazon SES API 为身份启用 DKIM。与 API 交互的常用方法是使用 AWS CLI。

**要为身份启用 DKIM，请使用 AWS CLI**
+ 在命令行处，键入以下命令：

  ```
  aws ses set-identity-dkim-enabled --identity example.com --dkim-enabled
  ```

  在前面的示例中，*example.com*替换为要为其启用 DKIM 的身份。您可以指定电子邮件地址或域。

## 覆盖在电子邮件地址身份上继承的 DKIM 签名
<a name="send-email-authentication-dkim-easy-setup-email"></a>

在此部分中，您将学习如何覆盖（禁用或启用）来自您已使用 Amazon SES 验证的特定电子邮件地址身份上的父域继承的 DKIM 签名属性。您只能对属于您已拥有的域的电子邮件地址身份执行此操作，因为 DNS 设置是在域级别配置的。

**重要**  
你不能 disable/enable DKIM 签名获取电子邮件地址身份...  
在您不拥有的域上。例如，您无法为注册 *gmail.com* 或 *hotmail.com* 地址切换 DKIM。
在您拥有但尚未在 Amazon SES 中验证的域名上，
在您拥有但尚未在域上启用 DKIM 签名的域名上。

本节包含以下主题：
+ [了解继承的 DKIM 签名属性](#dkim-easy-setup-email-key-points-mng)
+ [覆盖对电子邮件地址身份的 DKIM 签名（控制台）](#override-dkim-email-console-mng)
+ [覆盖对电子邮件地址身份的 DKIM 签名 (AWS CLI)](#override-dkim-email-cli-mng)

### 了解继承的 DKIM 签名属性
<a name="dkim-easy-setup-email-key-points-mng"></a>

重要的是，首先要理解，如果域配置了 DKIM，无论使用的是 Easy DKIM 还是 BYODKIM，电子邮件地址标识都会从其父域继承其 DKIM 签名属性。因此，在电子邮件地址标识上禁用或启用 DKIM 签名实际上是基于以下关键事实覆盖域的 DKIM 签名属性：
+ 如果您已为电子邮件地址所属于的域设置了 DKIM，则无需再为电子邮件地址设置 DKIM。
  + 在为域设置 DKIM 时，Amazon SES 通过从父域继承的 DKIM 属性，自动认证来自该域上每个地址的每一封邮件。
+ 特定电子邮件地址标识的 DKIM 设置*自动覆盖地址所属的父域或子域（如适用）*的设置。

由于电子邮件地址身份的 DKIM 签名属性是从父域继承的，因此如果您计划覆盖这些属性，则必须记住覆盖的层次规则，如下表所述。

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/ses/latest/dg/send-email-authentication-dkim-easy-managing.html)

通常不建议禁用您的 DKIM 签名，因为这有可能损害您的发件人声誉，并且会增加您发送的邮件转到垃圾邮件或垃圾邮件文件夹或域名被欺骗的风险。

但是，对于任何特定的使用情形或外围业务决策，可以覆盖电子邮件地址标识上的域继承的 DKIM 签名属性，您可能必须永久或临时禁用 DKIM 签名，或者在以后重新将其启用。

### 覆盖对电子邮件地址身份的 DKIM 签名（控制台）
<a name="override-dkim-email-console-mng"></a>

以下 SES 控制台过程向您介绍如何覆盖（禁用或启用）来自您已使用 Amazon SES 验证的特定电子邮件地址身份上的父域继承的 DKIM 签名属性。

**使用控制 disable/enable 台进行 DKIM 签名以获取电子邮件地址身份**

1. 登录 AWS 管理控制台 并打开 Amazon SES 控制台，网址为[https://console.aws.amazon.com/ses/](https://console.aws.amazon.com/ses/)。

1. 在导航窗格中的**配置**下，选择**已验证身份**。

1. 在身份列表中，选择 **Identity type**（身份类型）为 *Email address*（电子邮件地址）并且属于已验证域之一的身份。

1. 在 “**身份验证**” 选项卡下的 “**DomainKeys 已识别邮件 (DKIM)**” 容器中，选择 “**编辑”**。
**注意**  
仅当选定的电子邮件地址身份属于已经过 SES 验证的域时，才会显示 **Authentication**（身份验证）选项卡。如果您尚未验证域，请参阅 [创建域身份](creating-identities.md#verify-domain-procedure)。

1. 在 **DKIM signatures**（DKIM）签名字段中的**高级 DKIM 设置**下，清除**已启用**复选框以禁用 DKIM 签名，或者选中它以重新启用 DKIM 签名（如果先前已覆盖）。

1. 选择**保存更改**。

### 覆盖对电子邮件地址身份的 DKIM 签名 (AWS CLI)
<a name="override-dkim-email-cli-mng"></a>

以下示例使用 AWS CLI 带有 SES API 命令和参数，这些命令和参数将覆盖（禁用或启用）从父域继承的 DKIM 签名属性，该属性已通过您已通过 SES 验证的特定电子邮件地址身份。

**要使用 disable/enable DKIM 签署电子邮件地址身份 AWS CLI**
+  假设你拥有 *example.com* 域名，并且要禁用域的其中一个电子邮件地址的 DKIM 签名，请在命令行键入以下命令：

  ```
  aws sesv2 put-email-identity-dkim-attributes --email-identity marketing@example.com --no-signing-enabled
  ```

  1. *marketing@example.com*替换为要禁用 DKIM 签名的电子邮件地址身份。

  1. `--no-signing-enabled` 将禁用 DKIM 签名。要重新启用 DKIM 签名，请使用 `--signing-enabled`。

# Amazon SES 中的手动 DKIM 签名
<a name="send-email-authentication-dkim-manual"></a>

作为使用 Easy DKIM 的替代方案，您可以手动将 DKIM 签名添加到您的邮件，然后使用 Amazon SES 发送这些邮件。如果您选择手动对邮件进行签名，则必须首先创建 DKIM 签名。在创建邮件和 DKIM 签名后，可以使用 [SendRawEmail](https://docs.aws.amazon.com/ses/latest/APIReference/API_SendRawEmail.html) API 来发送它。

如果您决定手动对电子邮件进行签名，请考虑以下因素：
+ 您使用 Amazon SES 发送的每封邮件均包含引用 *amazonses.com* 的签名域的 DKIM 标头（即，它包含以下字符串：`d=amazonses.com`）。因此，如果您手动对邮件进行签名，邮件将包括*两个* DKIM 标头：一个用于您的域，一个由 Amazon SES 自动创建用于 *amazonses.com*。
+ Amazon SES 不验证您手动添加到邮件中的 DKIM 签名。如果邮件中的 DKIM 签名出现错误，则它可能会被电子邮件提供商拒绝。
+ 在对邮件进行签名时，应使用至少为 1024 位的位长度。
+ 不要对以下字段进行签名：Message-ID (邮件 ID)、Date (日期)、Return-Path (退回路径)、Bounces-To (退回到)。
**注意**  
如果您使用电子邮件客户端通过 Amazon SES SMTP 接口发送电子邮件，则您的客户端可能会自动对邮件进行 DKIM 签名。某些客户端可能会对其中一些字段进行签名。有关预设情况下对哪些字段进行签名的信息，请参阅您的电子邮件客户端文档。