Skip to content

DKIM是什麼?簽章原理與DNS金鑰設定步驟

Posted in :

jc-seo

DKIM 是替外寄郵件加上數位簽章的驗證機制:郵件伺服器用私鑰在郵件標頭加入簽章,收件端再到你網域的 DNS 取得公鑰比對,確認郵件由這個網域簽署、簽署過的內容在途中沒被修改。各家郵件服務的設定流程大致相同:在管理後台產生金鑰,把後台提供的紀錄加到網域 DNS,等紀錄生效後啟用簽署,再寄一封測試信到外部信箱,檢查標頭是否顯示 dkim=pass。

DKIM 簽章原理:私鑰簽署、公鑰驗證

DKIM 使用一組成對的金鑰。私鑰留在郵件服務端,每封外寄郵件都會用它產生簽章,寫進標頭的 DKIM-Signature 欄位;公鑰則發布在網域的 DNS,供收件端取用。DKIM-Signature 裡有兩個值和驗證有關:

  • d=:簽署這封信的網域。
  • s=:選擇器,收件端依它找到 DNS 上對應的公鑰紀錄。

微軟的說明指出,只要中間經手的郵件系統沒有修改已簽署的部分,簽章就有效;公鑰在 Microsoft 365 是用 CNAME 紀錄指向,其他郵件系統則可能直接用 TXT 紀錄。DKIM 通過之後,還要看 d= 的網域是否和寄件者網域對齊,才會影響 DMARC 的判斷,對齊規則見DMARC 的設定與政策收緊。

啟用前的準備:權限、DNS 與代寄服務

  • 管理權限:Google Workspace 要用超級管理員帳號產生金鑰,Microsoft 365 也要用具管理權限的帳號操作。
  • DNS 存取:確認誰能登入目前負責網域 DNS 的代管商,金鑰紀錄要加在那裡才會生效。
  • 代寄服務清單:電子報平台、官網表單、CRM 這些會用公司網域寄信的服務,各自需要設定 DKIM。

另外,剛在 Google Workspace 開通 Gmail 的網域,Google 說明要等二十四到七十二小時才能產生金鑰,太早操作可能會失敗。

Google Workspace 啟用 DKIM 的步驟

  1. 登入 Google 管理控制台,從選單依序進入「應用程式」「Google Workspace」「Gmail」,點選「驗證電子郵件」。
  2. 在「所選網域」選要設定的網域,按「產生新記錄」,選金鑰位元長度:代管商支援就選兩千零四十八位元,不支援時選一千零二十四位元。前置字元選取器預設為 google,按「生成」。
  3. 記下畫面上的「DNS 主機名稱(TXT 記錄名稱)」與「TXT 記錄值」,這時先不要按開始驗證。
  4. 到網域的 DNS 代管商新增一筆 TXT 紀錄,名稱填 google._domainkey 這類主機名稱,值貼上整段金鑰後存檔。
  5. 等候紀錄生效,Google 說明新增金鑰後可能要長達四十八小時才會開始運作。
  6. 回到「驗證電子郵件」,選同一個網域,按「開始驗證」。狀態顯示「正在使用 DKIM 驗證電子郵件」就完成了。

有多個網域時,每個網域都要從管理控制台各自取得金鑰。

Microsoft 365 啟用 DKIM 的步驟

微軟的說明指出,onmicrosoft.com 網域寄出的郵件會自動簽署,自訂網域則要另外設定才會以公司網域簽署:

  1. 在 Microsoft Defender 入口網站,依序進入「電子郵件與共同作業」「原則與規則」「威脅原則」「電子郵件驗證設定」,選「DKIM」索引標籤。
  2. 在自訂網域那一列,把切換開關從停用滑到啟用。畫面會跳出錯誤對話框,裡面列出需要建立的兩筆 CNAME 紀錄值,按確定繼續。
  3. 網域狀態會顯示 CnameMissing。點選該網域開啟詳細資料,在「發佈 CNAMEs」區塊複製兩筆紀錄的值,視窗保持開啟。
  4. 到網域註冊商或 DNS 代管商新增這兩筆 CNAME 紀錄。
  5. 等系統偵測到紀錄後,回到詳細資料視窗,開啟「使用 DKIM 簽章為此網域簽署郵件」,在跳出的對話框按確定。切換開關顯示為啟用、狀態顯示為簽署此網域的 DKIM 簽章就完成了;沒有變成啟用時,可能是系統還沒偵測到紀錄。微軟說明偵測需要幾分鐘甚至更久,DNS 傳播可能要幾分鐘到四十八小時。

CNAME 指向的值因網域而異,一律照入口網站顯示的內容複製。

把金鑰加進 DNS 時要注意的地方

  • 名稱被補上兩次網域:部分代管商會自動在名稱後面加上網域,若已經填了完整名稱,存檔後要確認沒有變成重複網域。
  • TXT 長度限制:Google 說明單一 TXT 字串上限為兩百五十五個字元,兩千零四十八位元的金鑰要拆成多段字串,每段各自加上引號;代管商不支援時可改用一千零二十四位元金鑰。
  • 金鑰被截斷:貼上後和後台的值逐字比對,確認沒有少字或順序錯亂。
  • 紀錄類型:Microsoft 365 要求的是 CNAME,不要自行改成 TXT。
  • 不寄信的網域:微軟建議完全不用來寄信的停放網域不要發布 DKIM 紀錄,讓冒用者無法通過驗證。

怎麼確認 DKIM 已經生效

Google 說明不能用寄給自己的測試信確認 DKIM 是否開啟,要從已啟用的網域寄信到其他 Gmail 帳戶或外部信箱,再照下列方式檢查:

  1. 在網頁版 Gmail 開啟這封信,按回覆旁的「更多」,選「顯示原始郵件」。
  2. 在標頭找到 Authentication-Results,DKIM 的結果應顯示 DKIM=pass 或 DKIM=OK 之類的內容。
  3. 再找 DKIM-Signature 欄位,確認 d= 是你的公司網域,而不是郵件服務商的網域。

標頭裡完全沒有 DKIM 這一行,代表郵件沒有被簽署,要回頭確認是否已經按下開始驗證或開啟簽署開關。微軟也提醒,每次調整 DKIM 設定後要等幾分鐘再測試。

驗證失敗的常見原因與金鑰輪替

紀錄正確卻仍驗證失敗,Google 的疑難排解說明列出幾種情況:

  • 結果顯示 body hash did not verify,代表郵件在傳送途中被修改過。
  • 外寄閘道在每封信底部加上頁尾,會讓簽章失效。
  • 郵件被轉寄後,即使原本設定正確,也可能驗證失敗。
  • DKIM 通過但仍進垃圾郵件,原因可能不在 DKIM,可對照Gmail 擋信的排查順序。

第三方服務代寄的郵件要由該服務簽署,微軟建議不直接控制的寄信服務可以改用子網域寄信。微軟也建議像更換密碼一樣定期輪替 DKIM 金鑰;在 Microsoft 365 輪替後,新私鑰要四天後才開始簽署,期間仍沿用舊金鑰。

常見問題

DKIM 和 SPF 有什麼不同?

SPF 檢查寄信的伺服器是否在網域授權的清單內,DKIM 檢查郵件簽章,確認郵件由網域簽署且內容未被改動。Gmail 寄件者規範要求寄信到個人 Gmail 帳戶的寄件者至少設定其中一項,大量寄件者兩項都要。

Microsoft 365 為什麼要建立兩筆 CNAME 紀錄?

兩筆紀錄對應兩個選擇器,各自指向一把金鑰。輪替金鑰時,系統會從原本的選擇器改用另一個選擇器簽署,所以兩筆紀錄都要建立並保留。

一個網域可以同時有多筆 DKIM 紀錄嗎?

可以。DKIM 用選擇器區分同一網域的多把公鑰,公司信箱和電子報平台可以各用自己的選擇器。Google 也提醒,網域已有同名選擇器時要改用其他名稱。

電子報平台寄的信也要設定 DKIM 嗎?

要。每個代你寄信的服務都要用你的網域簽署,通常由服務提供金鑰或紀錄讓你發布在 DNS;沒有設定時,簽署網域可能是服務商自己的網域,無法和你的寄件者網域對齊。

換 DNS 代管商後 DKIM 會失效嗎?

新的代管商若沒有把 DKIM 紀錄一起搬過去,收件端就查不到公鑰,驗證會失敗。切換前先匯出所有紀錄,切換後再寄一封測試信確認結果。

本文由京采數位科技整理。我們自 2005 年起提供官網設計、系統開發與 Google SEO 服務,實際案例可見成果與案例。

想直接討論你自己的網站狀況,或需要一份初步的搜尋機會評估?

相關主題

下一步

啟用前先確認誰能登入網域 DNS 與郵件管理後台,並列出所有代你寄信的服務。京采的技術 SEO 與網站健檢服務可以協助檢查網域 DNS 中的 DKIM、SPF 與 DMARC 紀錄是否正確發布,確認官網系統寄出的通知信有用公司網域簽署;需要協助時歡迎與我們聯絡。