使用 Exim4 作为 Exchange 2010 的“边缘传输”时 DKIM 失败

使用 Exim4 作为 Exchange 2010 的“边缘传输”时 DKIM 失败

我有一台运行 Exim 4.72 的服务器,其设置类似于 Exchange“边缘传输”角色:它将邮件从互联网转发到 Exchange,并将邮件从 Exchange 转发到互联网。

我在 Exim 中为外发邮件配置了 DKIM。当邮件直接发送到 Exim 时,它工作正常;Gmail 报告正文哈希值正确。当发送到 Exchange,然后转发到 Exim 时,DKIM 正文哈希值检查失败。

我尝试了简单和轻松两种方式。有人遇到过类似的事情或有什么见解吗?

答案1

和您一样,我怀疑 exim 在传输过程中更改了某些内容。您的 exim 系统是否偶然在每封外发邮件中添加了常用样板?DKIM 签名必须在添加后进行,并包含这些更改,以便可以将其包含在正文哈希中。

通用测试程序:

  1. 捕获一条原始消息。将收件人更改为您的私人邮箱,这样您就可以获得已发送的电子邮件的副本。我们假设包含该消息的文件名为 test.eml。将其保存在 exim 服务器上的某个位置。
  2. 临时配置 exim 以从本地主机对 DKIM 签名消息。不要重新启动 exim,我们只是从命令行进行测试。
  3. 在服务器上,使用如下命令将消息传递给 exim:

    exim -d -t < 测试.eml > 测试.out 2>&1

  4. 完成后,将生成一个名为“test.out”的文件。编辑该文件并查找“PDKIM”。它的第一个实例将是规范化的主体。第四个实例左右将是规范化的标题。查看这些部分,看看是否有任何变化,无论是与您发送的原始消息相比,还是与您收到的消息相比。

  5. 一般情况下,请查找与 DKIM 签名有关的任何内容。数据量很大,因此可能需要花很多时间才能找到。
  6. 确保在生成 DKIM 签名之后没有任何内容通过任何传输添加。
  7. 删除允许 exim 从本地主机签署电子邮件的临时配置设置。

我见过的典型变化通常与 mime 版本、mime 类型、内容传输编码、内容类型或字符集在传输过程中发生变化有关。但是,您说您的标头检查通过了,而正文检查没有通过。所以这让事情变得更加复杂。

相关内容