我正在设置一个基于 exim4 的邮件系统。该系统实现了 DKIM 签名和检查(以及其他功能)。签名似乎没有问题,但检查不起作用,并且 exim4 抱怨我的 TXT 记录的语法,该记录带有我的 dkim 公钥:
2014-02-02 22:37:31 1WA5fP-0004Y4-E2 DKIM: d=middle.earth s=a9d04665528b593d263a6e5256648c99 c=relaxed/relaxed a=rsa-sha256 [invalid - syntax error in public key record]
我使用 2048 位长的 RSA 密钥在邮件中继级别对我的邮件进行签名(这没问题,而且通过此服务器中继的邮件中确实有 DKIM 标头)。问题似乎在于 bind(该区域的 DNS 服务器)不支持区域文件中长度超过 255 个字符的记录。因此,我选择拆分记录,如下所示,并按照非常值得信赖的网站 zytrax.com 中的描述进行拆分:
...
a9d04665528b593d263a6e5256648c99._domainkey IN 1800 TXT ("k=rsa,p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAz2/ZfhxSI/A"
"bqgh0amM8ylrlosirWeKShUhq7fg12aYmRwOqq9hIzO0Fcz1BzfgHVu6HU++rC5"
"QoUK0JQK/nk4jwkDgvG2di2ZYmAvEbY/VeiK1x/TG0p1Iczr2k6Bj0gEAb/YGD2"
"YbwrwAi4bDXwoPsYuuNn9TB3jjyWKu/dvOsqhff1/4Wc+FkOi0ClvgrXiklN28X"
"TLjyjSyU794ntIoegXxrfwcwkhfPMvuqcnhfIC0Z8L71M4WR4SoHyNHVfBtNlUv"
"VNROiXlMxtxnNQvfViSwz6LC8bYIxeAba3hSXPTChKu3qZtfR0o3jFwEWAfLQdg"
"Ixler0jMEoAyJmfQIDAQAB")
完整的区域文件可以在这里找到:http://pastebin.com/GDE5XA2M
使用该配置,exim 会抱怨上述错误。如果我尝试手动解析我的 dkim 记录,则会得到以下结果:
;; ANSWER SECTION:
a9d04665528b593d263a6e5256648c99._domainkey.middle.earth. 1800 IN TXT "k=rsa,p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAz2/ZfhxSI/A" "bqgh0amM8ylrlosirWeKShUhq7fg12aYmRwOqq9hIzO0Fcz1BzfgHVu6HU++rC5" "QoUK0JQK/nk4jwkDgvG2di2ZYmAvEbY/VeiK1x/TG0p1Iczr2k6Bj0gEAb/YGD2" "YbwrwAi4bDXwoPsYuuNn9TB3jjyWKu/dvOsqhff1/4Wc+FkOi0ClvgrXiklN28X" "TLjyjSyU794ntIoegXxrfwcwkhfPMvuqcnhfIC0Z8L71M4WR4SoHyNHVfBtNlUv" "VNROiXlMxtxnNQvfViSwz6LC8bYIxeAba3hSXPTChKu3qZtfR0o3jFwEWAfLQdg" "Ixler0jMEoAyJmfQIDAQAB"
在我看来,这不太对劲,我可以想象 exim 会因为这样的输出而迷失方向。但是,我不能 100% 确定对于如此长的 DNS 记录,这是否是正常的 DNS 回复,exim 是否应该处理它,或者我设置的 bind 方式是否错误。
任何帮助都将不胜感激。
谢谢。
答案1
您使用逗号而不是分号来分隔记录中的键/值对。将其更改为:
a9d04665528b593d263a6e5256648c99._domainkey IN 1800 TXT (
"k=rsa;p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAz2/ZfhxSI/A"
"bqgh0amM8ylrlosirWeKShUhq7fg12aYmRwOqq9hIzO0Fcz1BzfgHVu6HU++rC5"
"QoUK0JQK/nk4jwkDgvG2di2ZYmAvEbY/VeiK1x/TG0p1Iczr2k6Bj0gEAb/YGD2"
"YbwrwAi4bDXwoPsYuuNn9TB3jjyWKu/dvOsqhff1/4Wc+FkOi0ClvgrXiklN28X"
"TLjyjSyU794ntIoegXxrfwcwkhfPMvuqcnhfIC0Z8L71M4WR4SoHyNHVfBtNlUv"
"VNROiXlMxtxnNQvfViSwz6LC8bYIxeAba3hSXPTChKu3qZtfR0o3jFwEWAfLQdg"
"Ixler0jMEoAyJmfQIDAQAB")
另外,我注意到,在我的特定区域文件中,我特别声明了版本为v=DKIM1
,我认为你也应该这样做。顺便提一下,我没有用 包装记录,( )
因为我只是将其全部放在一行中:
record._domainkey IN 1800 TXT "v=DKIM1;blah" "blah2" "blah3"
这是个人喜好,现在我意识到你的偏好肯定更具可读性。
答案2
就我而言,Google 的 DKIM 密钥非常长。您应该在 250-255 个字符后将其拆分到下一行,例如:
mail._domainkey IN TXT ( "v=DKIM1\; h=sha256\; k=rsa\; "
"p=MIIBIjANBgkqhki...."
"cOasyifDEj0AqBEEG7XbGfP0..."
"dM0FoPv4JsWByAgz/ywIDAQAB" )