我正在尝试将DKIM签名应用于从我们的域发出的简报(邮件列表)。不幸的是我无法在这里透露域名,因此我将其称为{mydomain} .co.il。我的选择器是“mta1”。
我按照在线说明进行了发球,但在测试结果时,我在签名的各个方面都收到了错误!
我使用http://www.port25.com/support/domainkeysdkim-wizard/创建了公钥和私钥。我将整个私钥复制到.pem文件中,包括行
-----BEGIN RSA PRIVATE KEY-----
MIICX...{rest of private key goes here}
-----END RSA PRIVATE KEY-----
我设置hMailServer在我们的域上使用DKIM签名,将其指向私钥,并告诉它使用SHA1(据我所知,它不是CPU密集型,更适合群发邮件列表)。
当然我设置和DNS记录如下:
mta1._domainkey.{mydomain}.co.il =
v=DKIM1; k=rsa; h=sha1; s=email; p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCptw7j4dessLrTmSKC1rg3yyB5
Vql0U+lzVoWXSHKB8f6ly7jgVze4Xp6V9U7OgcT/DRm421pUwcNgjO85yevxvISM
V64wAgfus6sCZI/eL8owRXpclbq89ap59TW75V5I9iDcCqKxpKoqjiuDP2pQwUbB
KphAb+vd8asNX8GRCQIDAQAB
_domainkey.{mydomain}.co.il =
t=y;o=~;
首先,我使用http://dkimcore.org/tools/dkimrecordcheck.html检查了DNS记录,并获得了以下愚蠢:
p= MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDtjJF/34Z3g5bk/qP7cf0UxSNj 5nAodXgCQ7c0CJq1fIyY3QWl4l4LnYNJ11yIsCB13eQbAzx6gQOiLg0getR17D5i GMmK5EIp5kGn6PC3afjiaXlwS6geM59BINxXAwn6/GTwhdS0i0lnJ7bJePbrC7+E Xn9pxfXr1q79n3RCuwIDAQAB
The p= field must be base64 encoded
...但这是port25.com生成的公钥的精确副本!
接下来,我测试了我的实际DKIM签名,如下所示:
dkim-signature: v=1; a=rsa-sha1; d={mydomain}.co.il; s=mta1;
c=relaxed/relaxed; q=dns/txt; h=From:Reply-To:Subject:Date:Message-ID:To:MIME-Version:Content-Type:List-Help:List-Unsubscribe:List-Post:List-Owner:List-Archive;
bh=MrAZfkhgb6I02eyuqIKMb+Zg1L0=;
b=GmncisEWZjOhQfnnEzZNTAbOvqo+7JJSU52tbpA103Alw5jTIy3UF4L6xWpajQjP4P76UyByOcS8cAr9i8VIBxr/qrArqwYpOfd9teQ0Adx58Ywn03dsNWDs+succQSZ3EkrQJFf7cQFdbakEHzrzEAYJYLQaoSx3KbitFf2Kjc=
我使用http://www.appmaildev.com/en/dkim/测试了我们的DKIM签名电子邮件,并收到以下错误:
Exception: No records found for given DNS query
......但事实并非如此!
我也遇到以下错误:
============================================================
DKIM result: fail (wrong body hash: MrAZfkhgb6I02eyuqIKMb+Zg1L0=)
============================================================
Signed by: office@{mydomain}.co.il
Expected Body Hash: hr++FhCjnb1cH9c0FJGJsCnCgNA=
我做错了什么? 有谁知道我能做些什么来解决这个问题?
答案 0 :(得分:2)
我注意到的第一件事是,在您的DNS记录中,p=
值内似乎有空格(换行符或其他内容)。在构造密钥记录时,应该将多行base64文本连接成一条长行,没有空格。
密钥记录中的s=
(服务类型)和h=
(哈希算法)标记不常用。如果某些内容拒绝了该记录,您可能需要在修复p=
值后重新测试,至少暂时删除这些值以查看是否存在问题。
您没有提及生成签名的软件。身体哈希问题可能是由于规范化问题(可能尝试设置'严格'),或者在签名消息后纠正消息(签名或法律免责声明?)。还有一种模糊的效果,一些邮寄者会添加一个>在单词“From”之前,如果它出现在一行的开头,这也会破坏正文哈希值。