DKIM 错误签名。 Expeded Body Hash 与发送的 BH 相同。阿帕奇詹姆斯

DKIM bad Signature. Expeted Body Hash is the same as the BH sended. Apache James

我对这个话题做了很多研究。我有一个 Apache James 2.3.2.1 邮件服务器。我正在将其配置为生产服务器。我得到它 运行,并且稳定,但是实现 jDKIM 一直很麻烦。我发现这些链接是正确的。 http://www.nailedtothex.org/roller/kyle/entry/configuring-james-to-sign-dkim https://github.com/smoradi/config/blob/master/noften/apache-james.txt

到现在为止,我反复验证了public和私钥。邮件库。 Java Mailet 的代码和配置。 但是我卡住了。

在使用 www.appmaildev.com/en/domainkeys/ 进行测试时,我终于解决了上述主题的一些错误。但现在它只是在玩弄我。 在 DKIM 测试结果中,它表示预期的正文哈希必须是 预期的正文哈希:

  : frcCV1k9oG9oKj3dpUqdJg1PxRT2RSN/XKdLCPjaYaY=

但是在消息头中说正文哈希就是这样。

bh : frcCV1k9oG9oKj3dpUqdJg1PxRT2RSN/XKdLCPjaYaY=

而且都是一样的,所以这个测试应该没问题。 也许我在 de DNS 或 Mailet 配置中遗漏了一些东西,我只是不知道我一直在尝试以不同的方式进行处理,但这是我每次都得到的。

请注意,在得到这一点之前,每次我通过 Outlook 或 Homail 发送邮件时,它都会立即进入垃圾邮件,现在几乎每 3 或 5 次发送一次都是随机的。而自 SPF 以来,Gmail 始终将它们放在收件箱中。并且服务器没有在 DNS 中正确配置的 PTR 记录。

这是来自 appmaildev 的邮件。

我把域名改了example.com

并将 IP 更改为 xxx.xxx.xxx.xxx

这个测试特别是通过 telnet 使用 ehlo

我把代码中比较费解的部分标了** **。

============================================= ===================

DKIM 结果:失败(签名错误)

Signed by: webmaster@example.com
**Expected Body Hash: frcCV1k9oG9oKj3dpUqdJg1PxRT2RSN/XKdLCPjaYaY=**

PublicKey: selector._domainkey.example.com
    IN TXT = "k=rsa; p=
MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCtLBczKGEysTT6QuRgApyn6yvM
XOU9Sjkx6YMomuFujqPk2XgMuBbgafckRX+1F18h9G1rURmvc3EmPxegFxim6wrE
1RJGfddO+OHEjTBOsuXa7BK29P/bhCOehVeYG4o0L5DH8z3izfmvNuC3dC4N5G3R
8ZrNd7k/196TCZIaMwIDAQAB;"

---Original Message Header---
x-sender: webmaster@example.com
x-receiver: AAAA4AcCCxQA@appmaildev.com
Received: from james ([xxx.xxx.xxx.xxx]) by mail.appmaildev.com with Microsoft SMTPSVC(7.5.7600.16385);
     Thu, 11 Feb 2016 22:05:19 -0500
DKIM-Signature: v=1; d=example.com; b=V9gPNU9Gjky7fFov5cYuTGN/gQEoBgaAkctwnME17pT/Uket4PDsVixMQbyiKvgQF3ADK8HTrKyd1L+9bBiesJAQaD1L1lH0ualjO/Ctf8jjzLyDUfB6cu4TEuAD+aVkIUVVbd0LNhcpxiOMsd5cADRBqZy60Mw9fQOaqyjh0QU=; s=selector; a=rsa-sha256; **bh=frcCV1k9oG9oKj3dpUqdJg1PxRT2RSN/XKdLCPjaYaY=;** h=from:to:received:received;
Message-ID: <1848510914.01455246317306.JavaMail.root@james>
MIME-Version: 1.0
Content-Type: text/plain; charset=us-ascii
Content-Transfer-Encoding: 7bit
X-UserIsAuth: true
Received: from localhost.localdomain ([127.0.0.1])
by james (JAMES SMTP Server 2.3.2.1) with SMTP ID 101
for <AAAA4AcCCxQA@appmaildev.com>;
Fri, 12 Feb 2016 03:05:17 +0000 (UTC)
Date: Fri, 12 Feb 2016 03:05:17 +0000 (UTC)
From: webmaster@example.com
subject: prueba ehlo
ehlo.:
Bcc:
Return-Path: webmaster@example.com
X-OriginalArrivalTime: 12 Feb 2016 03:05:20.0069 (UTC) FILETIME=[34ED9F50:01D16542] 

经过更多的研究和测试,我让它工作了。 看来我在 DKIM 签名中缺少值。 这是我在 DKIMSign mailet 中为 Apache James 在 config.xml 中的原始标记:

  <signatureTemplate>v=1; s=selector; d=example.com;
 h=from:to:received:received; a=rsa-sha256; bh=;
 b=;</signatureTemplate>

我遗漏了 "c",我对 "h"

c=relaxed/relaxed;

h=Message-ID:Date:Subject:From:To:MIME-Version:Content-Type;

修改后得到:

  <signatureTemplate>v=1; s=selector; d=example.com; 
  h=Message-ID:Date:Subject:From:To:MIME-Version:Content-Type; 
  a=rsa-sha256; bh=; b=;c=relaxed/relaxed;</signatureTemplate>

我进行了多次测试的另一个细节是 DNS 记录。我的已超过 Windows 服务器,所以为了谨慎起见,我检查了这些详细信息。

首先,"k"

中分号前的转义字符
k=rsa\; 

其次,"p" 值是最后一个值,没有分号或转义字符。

p=MIG...QAB

因此,在主机命令后我得到了类似

的东西
selector._domainkey.example.com descriptive text "k=rsa\;p=0...QAB"

经过这些更改和检查。它通过了所有测试:)

另一个 link 我发现对配置有用的是这个。 http://mail-archives.apache.org/mod_mbox/james-server-user/201410.mbox/%3C544FD474.2040906%40malcolms.com%3E