我遇到了一个问题,我的 DKIM 签名到处都失败了。有一个关于此的问题这里,但原始发帖人回答了自己的问题,答案似乎无关紧要。经过一番挖掘,我曾认为这可能是 OpenDKIM 的规范化问题,FixCRLF
配置设置可能会修复它,但似乎没有这样做。现在我在想我的 openssl 实现可能存在一些问题(请参阅下面的原因)。我该如何从这里进一步诊断和修复这个问题?
我迄今为止的诊断步骤
这个问题最初出现的时候,我注意到从我的自托管域名发送到我的 Gmail 帐户的电子邮件在标题中存在 DKIM 故障。在谷歌上搜索如何测试这个问题后,我发现OpenDKIM 自述文件包括测试部分。它似乎有点过时了,因为一些资源实际上不起作用([电子邮件保护]似乎不存在,[电子邮件保护]将邮件作为垃圾邮件退回,这……对于测试服务来说并不理想 :) );但是,Port25 验证程序最初似乎非常有用,因为它们不仅会告诉您失败,而且还包括规范化的标头。因此,我的第一次测试返回了以下内容:
Canonicalized Headers:
from:My'20'Name'20'<[email protected]>'0D''0A'
subject:Port25'20'check-auth'20'1'0D''0A'
date:Fri,'20'1'20'Oct'20'2021'20'07:10:19'20'+0200'0D''0A'
to:[email protected]'0D''0A'
dkim-signature:v=1;'20'a=rsa-sha256;'20'c=relaxed/relaxed;'20'd=mydomain.com;'20's=default;'20't=1633065019;'20'bh=2ZDQvBeN3kIWoOxg0Ccz1E/Pi+j4hDPFKwXDhxotTAA=;'20'h=From:Subject:Date:To:From;'20'b=
我已经打开了KeepTemporaryFiles
,opendkim.conf
并且我的服务器端保存的匿名化标头如下所示:
from:My Name <[email protected]>
subject:Port25 check-auth 1
date:Fri, 1 Oct 2021 07:10:19 +0200
to:[email protected]
dkim-signature:v=1; a=rsa-sha256; c=relaxed/relaxed; d=mydomain.com; s=default; t=1633065019; bh=2ZDQvBeN3kIWoOxg0Ccz1E/Pi+j4hDPFKwXDhxotTAA=; h=From:Subject:Date:To:From; b=
在我看来,它们看起来一模一样,但我开始怀疑 Port25 端的“0D”和“0A”。我是从 Mac 发送原始消息的,实际上我并不知道 MacOS 用什么来表示 EOL。我又谷歌了一下,偶然发现了这个stackoverflow 问答。这让我首先尝试发送纯文本电子邮件,但出现了同样的失败问题。选择另一个选项,我打开了FixCRLF
OpendDKIM。确实,使用 vim 以二进制模式打开本地临时文件,似乎设置有效:
from:My Name <[email protected]>^M
subject:Test with CRLF fixed(?)^M
date:Fri, 1 Oct 2021 07:40:52 +0200^M
to:[email protected]^M
dkim-signature:v=1; a=rsa-sha256; c=relaxed/relaxed; d=mydomain.com; s=default; t=1633066853; bh=tt5a2hZTsPGjeXhj9bcF3Kt9N5uk4aYb/j8ciXTYUZA=; h=From:Subject:Date:To:From; b=
不幸的是,Port25 验证器仍然没有给出任何结果。
作为最后的努力,我想到在自己的服务器上尝试一下——在两个不同的本地托管域名之间发送电子邮件。这至少有点有趣。
邮件日志显示:
...
Oct 1 05:50:27 ip-10-0-200-157 opendkim[22246]: 654F98004C: DKIM-Signature field added (s=default, d=mydomain.com)
...
Oct 1 05:50:27 ip-10-0-200-157 amavis[21845]: (21845-06) Checking: hRgGGArUlLf0 [88.101.121.213] <[email protected]> -> <[email protected]>
...
Oct 1 05:50:29 ip-10-0-200-157 amavis[21845]: (21845-06) hRgGGArUlLf0 FWD from <[email protected]> -> <[email protected]>, BODY=7BIT 250 2.0.0 from MTA(smtp:[127.0.0.1]:10025): 250 2.0.0 Ok: queued as 5248A80051
Oct 1 05:50:29 ip-10-0-200-157 amavis[21845]: (21845-06) Passed CLEAN {RelayedInbound}, [88.101.121.213]:63859 [88.101.121.213] <[email protected]> -> <[email protected]>, Queue-ID: 654F98004C, Message-ID: <[email protected]>, mail_id: hRgGGArUlLf0, Hits: -0.799, size: 3683, queued_as: 5248A80051, 1878 ms
然而,在收到的邮件的实际标题中,我看到
...
X-Spam-Status: No, score=-0.799 tests=[ALL_TRUSTED=-1, DKIM_INVALID=0.1, DKIM_SIGNED=0.1, HTML_MESSAGE=0.001] autolearn=no autolearn_force=no
Dkim-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=mydomain.com; s=default; t=1633067427; bh=+FsxBlX8LDcIVqvq7tKOtml1vsfEjh0rYTRVokBgmQ4=; h=From:Subject:Date:To:From; b=yDkI63wnvN8deIU4AtruGu4r/ybCTBLzmdwkTEhSYNCU56oGp0lP8n4FnXW7H67TL DFtlw/U9/MZPhR0Jeorl3gBdLebBV02v60wpLlFKXF5N4NL/cZbp8/U0liGZGVPoWj PP+OV/uOwNMDUhLG2I8jN88Zi9sHduo8xr7DOmy4=
...
Dkim-Filter: OpenDKIM Filter v2.11.0 ip-10-0-200-157.eu-central-1.compute.internal 654F98004C
...
Authentication-Results: mx.mymaildomain.com (amavisd-new); dkim=fail (1024-bit key) reason="fail (OpenSSL error: data too large for modulus)" header.d=mydomain.com
最后一行是我唯一剩下的线索。我……无法想象任何数据实际上太大,但也许我遇到了一些 OpenSSL 问题?特别是,即使它正在应用签名,签名也有些错误?我真的不知道接下来该怎么办。
如果您对哪里出了问题或者下一步该做什么有任何建议,我们将不胜感激。
这是使用 OpendDKIM、AmavisD 和 Postfix 的结果:
# opendkim -V
opendkim: OpenDKIM Filter v2.11.0
Compiled with OpenSSL 1.0.1e-fips 11 Feb 2013
SMFI_VERSION 0x1000001
libmilter version 1.0.1
Supported signing algorithms:
rsa-sha1
rsa-sha256
Supported canonicalization algorithms:
relaxed
simple
Active code options:
QUERY_CACHE
USE_DB
USE_LDAP
USE_ODBX
libopendkim 2.11.0: query_cache
# amavisd -V
amavisd-new-2.12.0 (20190725)
# postconf mail_version
mail_version = 2.10.1