在 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 簽署金鑰長度以及如何變更金鑰長度。

注意

只要產生的私有金鑰至少使用 1024 位元 RSA 加密 (最高可達 2048 位元),並使用 base64 (PEM) 進行編碼,您可以使用第三方應用程式和工具來產生 RSA 金鑰對。

在下列程序中,使用內建於大部分 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 供應商的網域組態

現在您已建立金鑰對,您必須將公有金鑰新增至網域的 DNS 組態,做為 TXT 記錄。

將公有金鑰新增至網域的 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-----)。此外,您必須移除所產生私有金鑰中的換行符號。產生的值是字元的字串,不帶空格或換行符號。

    • 以您在網域的 DNS 組態中建立 TXT 記錄時所指定的唯一選取器取代 selector

    完成後,請將檔案儲存為 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. 前往 https://console.aws.amazon.com/ses/ 登入 AWS Management Console 並開啟 Amazon SES 主控台。

  2. 在導覽窗格中的 Configuration (組態) 下,選擇 Verified identities (已驗證身分)。

  3. 在身分清單中,選擇 Identity type (身分類型)Domain (網域) 的身分。

    注意

    如果您需要建立或驗證網域,請參閱 建立網域身分

  4. Authentication (身分驗證) 索引標籤下方的 DomainKeys Identified Mail (DKIM) (網域金鑰識別郵件 (DKIM)) 窗格中,選擇 Edit (編輯)。

  5. Advanced DKIM settings (進階 DKIM 設定) 窗格中,選擇 Identity type (身分類型) 欄位中的 Provide DKIM authentication token (BYODKIM) (提供 DKIM 身分驗證字符 (BYODKIM)) 按鈕。

  6. 針對私有金鑰,請貼上您稍早產生的私有金鑰。

    注意

    您必須刪除所產生私有金鑰的第一行和最後一行 (分別為 -----BEGIN PRIVATE KEY----------END PRIVATE KEY-----)。此外,您必須移除所產生私有金鑰中的換行符號。產生的值是字元的字串,不帶空格或換行符號。

  7. 對於 Selector name (選取器名稱),輸入您在網域 DNS 設定中指定的選擇器名稱。

  8. DKIM signatures (DKIM 簽章) 欄位中,選中 Enabled (已啟用) 方塊。

  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-----)。此外,您必須移除所產生私有金鑰中的換行符號。產生的值是字元的字串,不帶空格或換行符號。

    • 以您在網域的 DNS 組態中建立 TXT 記錄時所指定的唯一選取器取代 selector

    完成後,請將檔案儲存為 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/create-identity.json

    • 以您要更新的網域取代 example.com

驗證使用 BYODKIM 的網域的 DKIM 狀態

從主控台驗證網域的 DKIM 狀態

將網域設定為使用 BYODKIM 之後,您可以使用 SES 主控台來驗證已正確設定 DKIM。

  1. 前往 https://console.aws.amazon.com/ses/ 登入 AWS Management Console 並開啟 Amazon SES 主控台。

  2. 在導覽窗格中的 Configuration (組態) 下,選擇 Verified identities (已驗證身分)。

  3. 在身分清單中,選擇您要驗證 DKIM 狀態的身分。

  4. 對 DNS 設定的變更最多可能需要 72 小時才會傳播。當 Amazon SES 在您網域的 DNS 設定中偵測到所有必需的 DKIM 記錄時,驗證程序即完成。若所有內容都已正確設定,在 DomainKeys Identified Mail (DKIM) (網域金鑰識別郵件 (DKIM)) 窗格中,您網域的 DKIM configuration (DKIM 設定) 欄位將顯示為 Successful (成功),並且 Summary (摘要) 窗格中的 Identity status (身分狀態) 欄位將顯示為 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