Domain-Name-System

有效的 DKIM 簽名隨機無法驗證

  • January 23, 2018

場景:

我有幾個電子郵件伺服器在防火牆後面的 Debian 上執行,一個公共 IP 並且我已經正確設置了我的 DNS 記錄(MCX、DMARC、DKIM、SPF)。

這是我的 DNS 記錄範例(由 dig 命令輸出):

DKIM
customselector._domainkey.domain.com. 3600 IN TXT  "v=DKIM1\; h=rsa-sha256\; k=rsa\; s=email\; " "p=MII...

SPF:
domain.com.           3599    IN      TXT     "v=spf1 mx -all"

MX:
domain.com.           3599    IN      MX      1 mailsystem.domain.com.

DMARC:
_dmarc.domain.com.    3599    IN      TXT     "v=DMARC1\;p=quarantine\;sp=reject\;rua=mailto:dmarc@domain.com\; ruf=mailto:dmarc@domain.com\; fo=1\; adkim=r\; aspf=r\; pct=100\; rf=afrf\; ri=86400"

嘗試了幾個公共測試系統,我的整個設置都得到了 100% 的驗證。但隨後我開始收到這些奇怪的報告,顯示大量來自我的公共 IP 的不良電子郵件以及一些電子郵件得到了同一域的完美驗證。下一個片段來自Google報告:

<record>
   <row>
     <source_ip>0.0.0.0</source_ip>
     <count>6</count>
     <policy_evaluated>
       <disposition>none</disposition>
       <dkim>pass</dkim>
       <spf>pass</spf>
     </policy_evaluated>
   </row>
   <identifiers>
     <header_from>domain.com</header_from>
   </identifiers>
   <auth_results>
     <dkim>
       <domain>domain.com</domain>
       <result>pass</result>
       <selector>customselector</selector>
     </dkim>
     <spf>
       <domain>domain.com</domain>
       <result>pass</result>
     </spf>
   </auth_results>
 </record>
 <record>
   <row>
     <source_ip>0.0.0.0</source_ip>
     <count>16</count>
     <policy_evaluated>
       <disposition>none</disposition>
       <dkim>fail</dkim>
       <spf>pass</spf>
     </policy_evaluated>
   </row>
   <identifiers>
     <header_from>domain.com</header_from>
   </identifiers>
   <auth_results>
     <dkim>
       <domain>domain.com</domain>
       <result>fail</result>
       <selector>customselector</selector>
     </dkim>
     <spf>
       <domain>domain.com</domain>
       <result>pass</result>
     </spf>
   </auth_results>
 </record>
 <record>

我收到了 6 封好郵件和 16 封壞郵件,它們幾乎都具有相同的內容。

測試:

配置:

我正在使用 opendkim,這是我認為相關的:

Canonicalization    relaxed/relaxed
Mode            sv
SubDomains      yes

雖然我的 DKIM 記錄是“有效的”,但一些驗證器不會接受h=rsa-sha256;DNS 記錄中的參數,並將 DKIM 簽名呈現為無效。我想Google在他們的郵件伺服器中使用了一些不同的 linux 發行版和不同的驗證器。

要解決此問題,只需刪除 DKIM 記錄中的該參數,它應該如下所示:

v=DKIM1; k=rsa; s=email; p=MI...

在此之後,每封電子郵件都將得到正確驗證。

我在做一些研究時穿過http://dkimvalidator.com,它是唯一產生相當混亂資訊的工具:

result = invalid
Details: public key: does not support hash algorithm 'sha256'

令人驚訝的是,這個錯誤似乎很不尋常,但是當您使用 opendkim 生成密鑰時,您可能會發現自己在執行以下操作:

opendkim-genkey -b 2048 -h rsa-sha256 -r -s customselector -d domain.com -v

它將不正確的參數寫入txt輸出文件,導致無效的 DKIM 記錄。

引用自:https://serverfault.com/questions/893777