DKIM DNS 記錄生成器

只需輸入選擇器(selector)名稱和公鑰(PEM格式),即可自動生成用於DKIM簽名的DNS TXT記錄(v=DKIM1; k=rsa; p=...)。超過255個字元的長公鑰會自動按BIND區域檔案格式進行分段。

拼出 DKIM 用的 DNS 記錄

輸入選擇器名與 PEM 格式的公鑰,本工具便拼出用於驗證 DKIM 簽章的 DNS TXT 記錄,形如 v=DKIM1; k=rsa; p=...。它該落在 選擇器._domainkey.您的網域 之下。

此處人人都會撞上的,是 DNS 的 TXT 記錄每條字串至多 255 個字元這一限制。 RSA 2048 位元的公鑰以 Base64 計約有 390 個字元,照原樣便塞不進一條字串。 在區域檔案裡,它以括號括起、拆作數條字串來寫,接收一方再把它們接回成一個取值。 本工具連這道拆分也一併替您做了。另一件萬萬不可弄錯的是:放進 DNS 的是公鑰。 私鑰只該留在簽章的伺服器上,絕不可外流。

使用方法

  1. 輸入網域與選擇器名 選擇器由您自取其名;每換一次金鑰,便另起一個。
  2. 貼入 PEM 格式的公鑰 是以 -----BEGIN PUBLIC KEY----- 開頭的那把,而非私鑰。
  3. 查看產生的記錄 一旦超過 255 個字元,輸出便以括號拆開來給。
  4. 登記到 DNS 以 TXT 記錄置於 選擇器._domainkey.您的網域。

用好本工具的小技巧

  • 可以直接貼上通過opendkim-genkey或OpenSSL的openssl genrsa → openssl rsa -pubout生成的PEM檔案內容,換行符和頭部行會被自動去除。
  • 啟用測試模式(t=y)後,部分接收方伺服器在DKIM驗證失敗時可能不會直接拒絕郵件而是先觀察。建議在切換到正式環境前的驗證階段使用。
  • 將生成的記錄新增到DNS後,建議使用本站的郵件送達診斷工具(SPF/DKIM/DMARC診斷)確認記錄是否已生效。
  • 常見金鑰長度為1024位和2048位,2048位金鑰生成的公鑰字串通常會超過255個字元從而被拆分為多段,這屬於正常現象而非錯誤。
  • 選擇器名稱可以自由設定,但如果同一域名使用多個郵件服務商,建議在名稱中加入服務商名稱(如"google"、"mailgun")以便於管理。

這些情境會用到

初次引入 DKIM

金鑰造好之後,它告訴您該怎樣寫進 DNS。

輪替金鑰

以新的選擇器添上一條記錄,切換之後再刪去舊的。

確認拆分的寫法

長金鑰該怎麼分,正是手寫時最易出錯的地方。

檢驗投遞服務給的指示

可確認外部服務遞來的記錄是否形制無誤。

DKIM 的術語

選擇器
標識一把金鑰的名稱。它構成 selector._domainkey.example.com 的開頭,每把金鑰各有其名。
公鑰
要放進 DNS 的那一把。 接收一方憑它驗證簽章。
私鑰
用來造出簽章的金鑰。它只該留在發信伺服器上,絕不可公開。
255 字元的限制
TXT 記錄中單條字串的上限。 更長者便拆作數條字串來寫。
v=DKIM1
言明記錄版本的標籤,置於最前。
k=rsa
金鑰的種類。除 RSA 之外尚有 Ed25519,其金鑰要短得多。

常見問題

這是用於在同一域名下區分使用多個DKIM金鑰的識別符號。DNS中記錄會以"選擇器._domainkey.域名"的形式公開,傳送郵件的DKIM-Signature頭中s=標籤的值會與之匹配,並使用對應選擇器的公鑰驗證簽名。

由於DNS的TXT記錄單個字串(character-string)最多為255位元組,超出部分會被拆分為多個帶引號的字串並無縫拼接,作為一條TXT記錄註冊。本工具生成的BIND格式表示已經處理好了這種拆分。

不能。本工具只負責組裝要釋出到DNS的記錄,不會生成私鑰。請使用opendkim-genkey或OpenSSL等可信工具,在自己的環境中安全地生成和保管私鑰。

建議在剛部署DKIM、需要確認在實際傳送環境中籤名與驗證是否正常工作的階段使用。部分接收方對帶有t=y的域名的DKIM驗證失敗會採取更寬鬆的處理方式,這在正式上線前起到安全緩衝的作用。

目前RSA(k=rsa)是實務上的標準,因為支援的收發伺服器範圍最廣。Ed25519(k=ed25519,RFC 8463)金鑰更短、簽名更快,但仍有部分郵件伺服器不支援,建議僅在確認雙方環境都能正常工作時才採用。
工具君

閒話 ― 公鑰加密如何防止郵件"冒充"

DKIM(DomainKeys Identified Mail)標準化於2004年,由Yahoo!和Cisco各自開發的技術(DomainKeys與Identified Internet Mail)整合而成。其核心是公鑰加密:傳送方使用私鑰對根據郵件頭和部分正文計算出的雜湊值進行加密,並附加為DKIM-Signature頭。接收方使用DNS中公開的公鑰驗證該簽名,如果金鑰對匹配,就能在數學上確認內容在傳送後未被篡改。

SPF驗證的是傳送方IP地址這一網路層面的合法性,而DKIM則是對郵件內容本身施加數字簽名,二者本質不同。因此即使郵件被正規中繼伺服器多次轉發(SPF在這類轉發場景中表現較弱),只要正文未被修改,DKIM簽名依然有效。因此在單純轉發的情況下,DKIM比SPF更容易保持認證結果。不過郵件列表經常會在主旨前加標籤或在內文末尾追加頁尾,從而改寫郵件標頭或內文,這時DKIM簽名同樣會失效(RFC 6377)。為了讓原始認證結果在經過這類中繼後仍能傳遞下去,人們設計了ARC(RFC 8617)。

選擇器(selector)機制在實際運用中也很重要。當一個域名同時使用多個郵件服務商(自建伺服器、Gmail、SendGrid等)時,可以為每個服務商分配獨立的金鑰對和選擇器名稱,從而單獨吊銷或更新金鑰。即使某個金鑰洩露,也不會影響其他選擇器——這種運維上的靈活性,正是DKIM雖然只是一條簡單的DNS記錄,卻能在大規模郵件基礎設施中長期廣泛使用的原因之一。