![有效 DKIM 签名随机验证失败](https://linux22.com/image/716618/%E6%9C%89%E6%95%88%20DKIM%20%E7%AD%BE%E5%90%8D%E9%9A%8F%E6%9C%BA%E9%AA%8C%E8%AF%81%E5%A4%B1%E8%B4%A5.png)
场景:
我有几个在防火墙后面的 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:[email protected]\; ruf=mailto:[email protected]\; 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 封坏邮件,它们的内容几乎都一样。
测试:
- [电子邮件保护]-> 好的
- Gmail 标头 -> dkim=pass[电子邮件保护];
- www.mail-tester.com-> DKIM_VALID
- [电子邮件保护]-> DKIM 签名验证:通过
- 在多个 DNS 服务器上进行挖掘 -> 确定
- mxtoolbox.com -> 一切看起来都很好
- 不同域名的邮件标头 -> 确定
配置:
我正在使用 opendkim,这是我认为相关的内容:
Canonicalization relaxed/relaxed
Mode sv
SubDomains yes
答案1
虽然我的 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 记录。