Domain-Name-System
有效的 DKIM 簽名隨機無法驗證
場景:
我有幾個電子郵件伺服器在防火牆後面的 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 封壞郵件,它們幾乎都具有相同的內容。
測試:
- check-auth@verifier.port25.com -> 好的
- Gmail 標頭 -> dkim=pass header.i=@domain.com;
- www.mail-tester.com -> DKIM_VALID
- autorespond+dkim@dk.elandsys.com -> DKIM 簽名驗證:通過
- 探勘幾個 DNS 伺服器 -> 好的
- mxtoolbox.com -> 一切正常
- 不同域上的郵件標頭-> 好的
配置:
我正在使用 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 記錄。