Exim的DKIM签名不会在Microsoft服务器上进行验证(outlook,hotmail)*仅*



Gmail以及本地ISP通过DKIM的Exim电子邮件,但微软没有,在标题中注明失败:

Authentication-Results: spf=pass (sender IP is[正确IP])smtp。mailfrom =(正确的域).co.uk;outlook.com;dkim=fail(签名失败)不验证)头。d =(正确的域),outlook.com;Dmarc =bestguesspass action=none header.from=[正确的域名];

我已经试过了:

我通过Google Apps (G Suite)电子邮件(使用不同的DKIM选择器,即另一个DNS TXT记录中的另一个公钥)从同一域向outlook发送了一封电子邮件,以比较消息来源- Google的消息传递DKIM。

我注意到两件事:

  1. Google在"h"标记,所以我重新配置了Exim,也正好使用这些,但无济于事。

  2. 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先生发送的,但是envelope-from和Return-Path标头是预期发件人的正确电子邮件地址。在这个区域应该不会有任何问题,因为SPF即使在MS上也是合格的。

而来自Google的邮件有

问题:& lt; (id) @(发送方的域)在

Exim发送的邮件有

问题:& lt; (id) @(服务器主机名)在

任何帮助/想法吗?

哇,真幸运!在发帖之前,我在无望地搜索Exim的用户邮件列表时,很偶然地找到了答案。我打开的一个公告消息也被发布到exim-dev,所以在底部的存档查看器显示了这个邮件列表中的前一条消息,这恰好是关于一个旧的,已解决的DKIM错误"dkim_sign_headers中包含的头不在签名中,当不在消息中"。

然而,这给了我一个想法,从dkim_sign_headers中排除不在我的Exim生成的电子邮件中的标题…它起作用了:)

dkim=pass(签名已验证)

似乎DKIM签名应该使用在"h"标签中指定的不存在的标头来计算,以便在随后添加到电子邮件中使签名失败(具有一定的安全意义),所以我的猜测是MS搞砸了计算,但我不确定。

有了@lm713的答案,我在exim配置文件中开始工作。我是这样做的:

  1. 查看头部并查看DKIM记录发送的内容。在我的例子中是这样的:

    from user by server.domain.com with local (Exim 4.83) (envelope-from) id xx-0000123-0K;2018年3月19日星期一21:04:41 +0100

  2. 通过SSH:进入exim.dkim.conf文件。你可以在这里找到它:/etc/exim.dkim.conf。如果你没有它并使用DirectAdmin,请遵循以下教程:https://help.directadmin.com/item.php?id=569

  3. 在文件中添加以"dkim_sign_headers = "开头的额外行

  4. 查看您的头DKIM记录并命名您看到的元素。在我的例子中是:

    from user by server.domain.com with local (Exim 4.83) (envelope-from) id xx-0000123-0K;2018年3月19日星期一21:04:41 +0100

所以我写:dkim_sign_headers = from:user-agent:message-id:date

  • 在ssh中输入此类型后:service exim restart
  • 相关内容

    • 没有找到相关文章

    最新更新