Exim 无法正确执行 DKIM 签名

Exim 无法正确执行 DKIM 签名

我在 Debian sid 上使用 exim 4.82。我已按照几个教程了解如何配置 exim 来签署外发电子邮件,但似乎有些事情不太对劲。

我的诊断是,无论电子邮件中的字段是什么,$sender_address_domain始终将其设置为服务器的主机名( )。/etc/hostnameFrom:

我在中定义了以下宏/etc/exim4/conf.d/transport/00_exim4-config_header

DKIM_CANON = relaxed
DKIM_DOMAIN = ${sender_address_domain}
DKIM_SELECTOR = dkim
DKIM_PRIVATE_KEY = /etc/exim4/dkim.private.key

euvps.rolisoft.net当前设置会签名外发电子邮件,但无论字段是什么,DKIM 签名中的域始终设置为From:。我最好的猜测是$sender_address_domain设置为euvps.rolisoft.net,而它应该设置为From:字段中电子邮件地址的域。

因此,验证失败并显示bad version以下消息:

DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed;
    d=euvps.rolisoft.net; s=dkim;  // <- d= should be set to whatever is in From
    h=Date:Message-Id:From:Subject:To; bh=...; b=...;
Authentication-Results: mx.google.com;
       spf=pass (google.com: domain of [email protected] designates 188.226.159.108 as permitted sender) [email protected];
       dkim=neutral (bad version) [email protected];
       dmarc=fail (p=NONE dis=NONE) header.from=seriesinfos.com

手动设置DKIM_DOMAIN为我要发送邮件的域名可以解决这个问题,DKIM 签名将生效。但是,我使用多个域名,因此最好将其DKIM_DOMAIN自动设置为我发送邮件的电子邮件地址。

我没有像一些教程建议的那样设置自定义路由器和传输。(我曾经这样做过,但结果相同,所以我删除了它们。)

设置DKIM_DOMAIN${lookup{$sender_address}lsearch*@{/etc/exim4/dkim_senders}}dkim_senders正确设置)将不会对消息进行签名,但是其中dkim_senders没有,所以我猜这里也设置为,这就是缺少签名的原因。euvps.rolisoft.net$sender_addresseuvps.rolisoft.net

我不太清楚如何调试$sender_address_domain所设置的内容。

答案1

虽然我仍然不确定为什么没有$sender_address正确填充,但我使用另一个变量找到了解决问题的方法:

DKIM_DOMAIN = ${lc:${domain:$h_from:}}

这会在 DKIM 签名上正确设置域名。

为了停止对我没有密钥的域名进行签名,我设置了另外两个宏:

DKIM_FILE = /etc/exim4/keys/${lc:${domain:$h_from:}}.pem
DKIM_PRIVATE_KEY = ${if exists{DKIM_FILE}{DKIM_FILE}{0}}

这些本质上只是寻找私钥,/etc/exim4/keys/*domain*.pem如果不存在则不会签名。

相关内容