Gmail和本地ISP通过DKIM发送Exim电子邮件,但微软没有通过标题中注明的失败:
身份验证 - 结果:spf = pass(发件人IP是[正确的IP]) smtp.mailfrom = [correct domain] .co.uk; outlook.com; dkim =失败(签名确实 不验证) header.d = [正确域名]; outlook.com; dmarc = bestguesspass action = none header.from = [correct domain];
我尝试过:
我通过Google Apps(G Suite)电子邮件(使用另一个DKIM选择器,即另一个DNS TXT记录中的另一个公钥)从同一个域向Outlook发送了一封电子邮件,以比较消息来源 - Google的消息通过了DKIM。 / p>
我注意到两件事:
Google在“h”标记中包含的标题少得多,因此我重新配置了Exim也正好使用这些标题,但无济于事。
Google在“h”标记中包含小写的标题名称,而Exim没有,尽管我在Exim的配置中以小写形式输入了它们。我在生成标头签名哈希时读到了标题名称应该是低位的,但是文本没有说明同样适用于“h”标记中的标题名称(http://dkimcore.org/specification.html第3.2节),谷歌似乎也这样做了。我想在Exim中压倒这个会很难吗?
我还注意到除了“h”的差异之外,DKIM-Signature标题结构在两个栏中都是完全相同的一些空格差异(exim也只有空格和分号后面的新行,所以它出现了没关系,它只是分手了。起初我想也许Exim没有设置一些必需的标签,但在这种情况下,错误应该是不同的。
Exim Version:4.87 在cPanel 11 centOS 7.2服务器上运行 Exim DKIM配置:
dkim_remote_smtp:
driver = smtp
interface = <; ${if exists {/etc/mailips}{${lookup{${lc:$sender_address_domain}}lsearch{/etc/maili
ps}{$value}{${lookup{${lc:$sender_address_domain}}lsearch{/etc/mailips}{$value}{${lookup{${perl{get_
sender_from_uid}}}lsearch*{/etc/mailips}{$value}{}}}}}}}}
helo_data = ${if exists {/etc/mailhelo}{${lookup{${lc:$sender_address_domain}}lsearch{/etc/mailhel
o}{$value}{${lookup{${lc:$sender_address_domain}}lsearch{/etc/mailhelo}{$value}{${lookup{${perl{get_
sender_from_uid}}}lsearch*{/etc/mailhelo}{$value}{$primary_hostname}}}}}}}{$primary_hostname}}
dkim_domain = ${lc:$sender_address_domain}
dkim_selector = default
dkim_private_key = "/var/cpanel/domain_keys/private/${dkim_domain}"
dkim_canon = relaxed
dkim_sign_headers = to:from:subject:message-id:date:user-agent:mime-version:content-transfer-encoding
(最后一行是我添加的 - 它之前没有用)
由于该错误似乎与签名验证有关,我不相信以下内容是相关的,但无论如何我都包含它:
Exim电子邮件由服务器上的nobody先生发送,但信封来自和Return-Path标头是预期发件人的正确电子邮件地址。这个领域不应该有任何问题,因为即使在MS上,SPF也会通过。
虽然Google发送的电子邮件已经
消息ID:&lt; [id] @ [发件人域名]&gt;
Exim发送的电子邮件
消息ID:&lt; [id] @ [服务器主机名]&gt;
非常感谢任何帮助/想法。一如既往MS让生活变得困难......有趣吗?
答案 0 :(得分:2)
但是,这让我有机会从dkim_sign_headers中排除我的Exim生成的电子邮件中没有的标题...并且它有效:)
dkim = pass(签名已经过验证)
似乎DKIM签名应该使用&#34; h&#34;中指定的不存在的标头来计算。如果签名随后被添加到电子邮件中,则会使签名失败(这具有一定的安全性),所以我的猜测是MS会弄乱计算,但我不确定。
答案 1 :(得分:0)
在@ lm713的答案中,我开始在exim配置文件中工作。这就是我所做的:
查看标题,查看使用DKIM记录发送的内容。就我而言,就是这样:
来自user.domain.com的用户使用本地(Exim 4.83)(信封来自)id xx-0000123-0K;星期一,2018年3月19日21:04:41 +0100
通过SSH:转到exim.dkim.conf文件。你可以在这里找到它:/etc/exim.dkim.conf。如果您没有并使用DirectAdmin,请按照以下教程进行操作:https://help.directadmin.com/item.php?id=569
在文件中添加一个额外的行,以&#34; dkim_sign_headers =&#34;开头。
查看标题DKIM记录并命名您看到的元素。就我而言,它是:
来自user.domain.com的用户使用本地(Exim 4.83)(信封来自)id xx-0000123-0K;星期一,2018年3月19日21:04:41 +0100
所以我写道:dkim_sign_headers = from:user-agent:message-id:date
现在应该可以了。