提供 Amazon SES 中您自己的 DKIM 身份验证令牌 (BYODKIM) - Amazon Simple Email Service

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

提供 Amazon SES 中您自己的 DKIM 身份验证令牌 (BYODKIM)

作为使用 Easy DKIM 的替代方法,您可以改为使用自己的公有-私有密钥对配置 DKIM 身份验证。此过程称为自带 DKIM (BYODKIM)。

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

警告

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

步骤 1:创建密钥对

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

生成的私有密钥必须为 PKCS #1 或 PKCS #8 两种格式之一,使用至少 1024 位 RSA 加密(至多 2048 位),并使用 base64(PEM)编码进行编码。有关 DKIM 签名密钥长度以及如何更改密钥长度的详情,请参阅 DKIM 签名密钥长度

注意

您可以使用第三方应用程序和工具生成 RSA 密钥对,只要私有密钥是使用至少 1024 位 RSA 加密(至多 2048 位)生成并使用 base64 (PEM) 编码进行编码的。

在以下过程中,使用大多数 Linux、macOS 或 Unix 操作系统中内置的 openssl genrsa 命令创建密钥对的示例代码将自动使用 base64 (PEM) 编码。

使用 Linux、macOS 或 Unix 命令行来创建密钥对
  1. 在命令行中,输入以下命令以生成私有密钥,将 nnnn 替换为长度至少为 1024,至多为 2048 的位数:

    openssl genrsa -f4 -out private.key nnnn
  2. 在命令行中,输入以下命令可生成公有密钥:

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

步骤 2:将选择器和公有密钥添加到 DNS 提供商的域配置中

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

将公有密钥添加到您的域的 DNS 配置中
  1. 登录您的 DNS 提供商或托管提供商的管理控制台。

  2. 将新的文本记录添加到您的域的 DNS 配置中。记录应该使用以下格式:

    名称 类型

    selector._domainkey.example.com

    TXT

    p=yourPublicKey

    在前面的示例中,进行以下更改:

    • selector 替换为用于标识密钥的唯一名称。

      注意

      少数 DNS 提供商不允许记录名称中包含下划线 (_)。但是,DKIM 记录名称中的下划线是必需的。如果您的 DNS 提供商不允许您在记录名称中输入下划线,请联系提供商的客户支持团队以获取帮助。

    • example.com 替换为您的域。

    • 用先前创建的公有密钥替换 yourPublicKey 并包含 p= 前缀,如上面的 Value(值)列所示。

      注意

      当您将公有密钥发布(添加)到 DNS 提供商时,必须按如下所示进行格式化:

      • 您必须删除生成的公有密钥的第一行和最后一行(分别为 -----BEGIN PUBLIC KEY----------END PUBLIC KEY-----)。此外,您还必须删除生成的公有密钥中的换行符。产生的值是一个字符串,不包含空格或换行符。

      • 您必须包含 p= 前缀,如上表中的 Value(值)列所示。

    不同的提供商具有不同的 DNS 记录更新过程。下表包含的链接指向几个广泛使用的 DNS 提供商的文档。此列表并不详尽无遗,也不表示认可;同样,如果您的 DNS 提供商未列出,这并不意味着您不能将该域与 Amazon SES 一起使用。

    DNS/托管提供商 文档链接

    Amazon Route 53

    《Amazon Route 53 开发人员指南》中的编辑记录

    GoDaddy

    添加 TXT 记录(外部链接)

    DreamHost

    如何添加自定义 DNS 记录?(外部链接)

    Cloudflare

    在 CloudFlare 中管理 DNS 记录(外部链接)

    HostGator

    通过 HostGator/eNom 管理 DNS 记录(外部链接)

    Namecheap

    如何为我的域添加 TXT/SPF/DKIM/DMARC 记录?(外部链接)

    Names.co.uk

    更改您的域的 DNS 设置(外部链接)

    Wix

    在您的 Wix 账户中添加或更新 TXT 记录(外部链接)

步骤 3:配置并验证域以使用 BYODKIM

您可以使用控制台或 AWS CLI 为新域(即当前不用于通过 Amazon SES 发送电子邮件的域)以及现有域(即您已设置为与 Amazon SES 一起使用的域)设置 BYODKIM。在使用此部分中的 AWS CLI 过程之前,首先必须安装和配置 AWS CLI。有关更多信息,请参阅 AWS Command Line Interface 用户指南

选项 1:创建使用 BYODKIM 的新域身份

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

如果要配置现有域以使用 BYODKIM,请改为完成 选项 2:配置现有域身份 中的过程。

从控制台使用 BYODKIM 创建身份
  • 按照创建域身份中的过程操作,当您到达步骤 8 时,请按照 BYODKIM 特定的说明进行操作。

从 AWS CLI 使用 BYODKIM 创建身份

要配置新域,请使用 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

  2. 在命令行输入以下命令:

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

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

选项 2:配置现有域身份

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

从控制台使用 BYODKIM 更新域身份
  1. 登录AWS Management Console并打开 Amazon SES 控制台,网址为 https://console.aws.amazon.com/ses/

  2. 在导航窗格中的 Configuration(配置)下,选择 Verified identities(已验证身份)。

  3. 在身份列表中,选择身份类型的身份。

    注意

    如果需要创建或验证域,请参阅 创建域身份

  4. Authentication(身份验证)选项卡下的 DomainKeys Identified Mail (DKIM) [域名密钥识别邮件 (DKIM)] 窗格中,选择 Edit(编辑)。

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

  6. 对于 Private key(私有密钥),粘贴先前生成的私有密钥。

    注意

    您必须删除生成的私有密钥的第一行和最后一行(分别为 -----BEGIN PRIVATE KEY----------END PRIVATE KEY-----)。此外,还必须删除生成的私有密钥中的换行符。产生的值是一个字符串,不包含空格或换行符。

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

  8. DKIM 签名字段中,选中已启用复选框。

  9. 选择 Save changes(保存更改)。

从 AWS CLI 使用 BYODKIM 更新域身份

要配置现有域,请使用 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

  2. 在命令行输入以下命令:

    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 状态

从控制台验证域的 DKIM 状态

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

  1. 登录AWS Management Console并打开 Amazon SES 控制台,网址为 https://console.aws.amazon.com/ses/

  2. 在导航窗格中的 Configuration(配置)下,选择 Verified identities(已验证身份)。

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

  4. 对 DNS 设置的更改最长可能需要 72 小时才能生效。一旦 Amazon SES 在域的 DNS 设置中检测到全部必需的 DKIM 记录,则验证过程完成。如果所有内容都已正确配置,则域的 DKIM configuration(DKIM 配置)字段将在 DomainKeys Identified Mail (DKIM) [域名密钥识别邮件 (DKIM)] 窗格中显示 Successful(成功),而 Identity status(身份状态)字段将在 Summary(摘要)窗格中显示 Verified(已验证)。

使用 AWS CLI 验证域的 DKIM 状态

配置域以使用 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