我使用 exim4 的邮件服务器有一个 ACL 来检查 DKIM 签名。它接受所有内容,但会记录失败并将结果写入标头。
我正在从另一台服务器发送邮件,我相信该服务器正确添加了 DKIM 签名。(例如,我已经向 gmail 和 outlook 地址发送了邮件,检查了标题,并且这两个系统都允许 DKIM 通行。)但我的邮件服务器说bodyhash_mismatch
。
我的邮件服务器并不总是说 DKIM 失败。
这是一封电子邮件。我已更改域名:
- 示例网站这是主要组织的域名;它用于从:标头,它是签名者域。公钥在 DNS 中发布。
- 发件人.example.org这是发送电子邮件、创建 DKIM 标头的服务器。它是返回路径標軸。
- 接收方.example.org这是我的邮件服务器的域,DKIM 正在验证。这是
X-dkim-check
添加标头的地方,以下文本domain=
来自$dkim_cur_signer
Return-Path: <[email protected]>
Delivered-To: [email protected]
Received: from mail.receiver.example.org
by mail.receiver.example.org with LMTP
id t8rHGepc52SOVA8ADCPZSA
(envelope-from <[email protected]>)
for <[email protected]>; Thu, 24 Aug 2023 14:36:42 +0100
Received: from sender-rdns.example.org ([1.2.3.4] helo=sender.example.org)
by mail.receiver.example.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384
(Exim 4.94.2)
(envelope-from <[email protected]>)
id 1qZAVv-004DMU-00
for [email protected]; Thu, 24 Aug 2023 14:36:42 +0100
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed;
d=example.org; s=220151210; h=Sender:Message-Id:Subject:From:To:Date:
Reply-To:Cc:MIME-Version:Content-Type:Content-Transfer-Encoding:Content-ID:
Content-Description:Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc
:Resent-Message-ID:In-Reply-To:References:List-Id:List-Help:List-Unsubscribe:
List-Subscribe:List-Post:List-Owner:List-Archive;
bh=ecGWgWCJeWxJFeM0urOVWP+KOlqqvsQYKOpYUP8nk7I=; b=GTY2HZVje81tRJ0/xKFNUk5d7/
9wE7CGtwmz2APM5VTDKY6q+qIbwhCRNzc6IWZ4j0Y9FOtnuVBeNR1I5xbOuqPaf62MYQZJFjLQ3/J
PNpOpS3i1Yd3NCZUs1iB/Q8N+ii73FrvD5k1AA8F5yzJhVeaposgbkvU5vv1s/KgqTIA=;
Received: from localhost ([127.0.0.1] helo=sender.example.org)
by sender.example.org with esmtp (Exim 4.96)
(envelope-from <[email protected]>)
id 1qZAVt-001EhO-2k
for [email protected];
Thu, 24 Aug 2023 14:36:41 +0100
Date: Thu, 24 Aug 2023 14:36:41 +0100
To: [email protected]
From: [email protected]
Subject: test Thu, 24 Aug 2023 14:36:41 +0100
Message-Id: <[email protected]>
X-Mailer: swaks v20201014.0 jetmore.org/john/code/swaks/
Sender: [email protected]
X-dkim-check: DKIM test failed: (domain=example.org), signature is bad.
This is a test mailing
我该如何调试为什么 exim onreceiver.example.org
认为签名不好?
(我注意到 DKIM 签名包含许多不存在的标头。这可能是原因吗?)
编辑:添加详细信息:
- 签署 exim:4.96-15+deb12u1。
- 接收进出口:4.94.2-7~bpo10+1
答案1
我不认为“不好”消息表达了签名无法验证的任何特定原因。配置正确的身份验证结果标头:该中继进出口银行告诉你的一切通过$dkim_verify_reason
。
尝试确定哪个消息失败,我记得其他验证器的例子只在某些消息或消息部分大小(块对齐,<= 16KiB,> = 16MiB ..你的测试消息看起来很小)或行长度(你的测试消息看起来很整齐,尽管不寻常,折叠)上出现错误。
另外,请比较发送时的消息源(理想情况下,因为它是单独上传到邮箱的Sent
)。它可能存在一些语法问题,在收到时已被丢弃,但对于签名来说却很重要。
思路:
- 我在签名中看到一个尾随的分号,并且在最后的 b= 标签之前没有折叠,这有点不常见 - 测试较少,并且可能不是消息签名时的样子。
- 我还看到一个现代 TLS 版本与一个古老的 exim 版本一起使用(所有版本的 Exim4.96 版之前的版本现已过时“”。)。我想知道您是否正在使用缺少上游已应用的相关修复的分销商版本。
我怀疑后者是导致你出现问题的原因,基于此补丁Debian 未应用奥尔兹特布尔到目前为止。如果是这样,它应该主要影响通过 BDAT over TLS 传输的小消息。
- 更新至较新版本的 exim - 可能需要升级 Debian,因为您已在使用反向移植 -或者
- 阅读或提交 Debian 错误报告,缺少的修复(链接至精选版本已准备好应用于 4.94.2)我怀疑有过错的人可能会被判定值得被拉,如果确实有过错的话 -或者
- 禁用分块支持(RFC 3030),如果这对你的用例没问题的话 -空的
chunking_advertise_hosts =
不会向任何人宣布 BDAT 的可用性,这应该可以解决问题 - 但对于大消息来说可能会有很大的性能成本。