gmail dkim=neutral(无签名)

gmail dkim=neutral(无签名)

经过多次测试并重新追溯我的步骤后,我仍然无法让 Google 邮件进行验证。

我的邮件服务器是 Debian 5.0 和 exim

Exim version 4.72 #1 built 31-Jul-2010 08:12:17
Copyright (c) University of Cambridge, 1995 - 2007
Berkeley DB: Berkeley DB 4.8.24: (August 14, 2009)
Support for: crypteq iconv() IPv6 PAM Perl Expand_dlfunc GnuTLS move_frozen_messages Content_Scanning DKIM Old_Demime
Lookups: lsearch wildlsearch nwildlsearch iplsearch cdb dbm dbmnz dnsdb dsearch ldap ldapdn ldapm mysql nis nis0 passwd pgsql sqlite
Authenticators: cram_md5 cyrus_sasl dovecot plaintext spa
Routers: accept dnslookup ipliteral iplookup manualroute queryprogram redirect
Transports: appendfile/maildir/mailstore/mbx autoreply lmtp pipe smtp
Fixed never_users: 0
Size of off_t: 8
GnuTLS compile-time version: 2.4.2
GnuTLS runtime version: 2.4.2
Configuration file is /var/lib/exim4/config.autogenerated

我的远程 smtp 传输配置:

remote_smtp:
  debug_print = "T: remote_smtp for $local_part@$domain"
  driver = smtp
  helo_data = mailer.mydomain.com
  dkim_domain = mydomain.com
  dkim_selector = mailer
  dkim_private_key = /etc/exim4/dkim/mailer.mydomain.com.key
  dkim_canon = relaxed

.ifdef REMOTE_SMTP_HOSTS_AVOID_TLS
  hosts_avoid_tls = REMOTE_SMTP_HOSTS_AVOID_TLS
.endif
.ifdef REMOTE_SMTP_HEADERS_REWRITE
  headers_rewrite = REMOTE_SMTP_HEADERS_REWRITE
.endif
.ifdef REMOTE_SMTP_RETURN_PATH
  return_path = REMOTE_SMTP_RETURN_PATH
.endif
.ifdef REMOTE_SMTP_HELO_FROM_DNS
  helo_data=REMOTE_SMTP_HELO_DATA
.endif

我的私钥路径是正确的。

当我的邮件最终进入我的 Gmail 帐户时,我看到其中有一个 DKIM 标头:

DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=mydomain.com; s=mailer;
    h=Content-Type:MIME-Version:Message-ID:Date:Subject:Reply-To:To:From; bh=nKgQAFyGv<snip>tg=;
    b=m84lyYvX6<snip>RBBqmW52m1ce2g=;

但是,gmail 标头始终报告 dkim=neutral(无签名):

dkim=neutral (no signature) [email protected]

我的 DNS 结果:

dig +short txt mailer._domainkey.mydomain.com
mailer._domainkey. mydomain.com descriptive text "v=DKIM1\; k=rsa\; t=y\; p=LS0tLS1CRUdJ<snip>M0RRRUJBUVV" "BQTRHTkFEQ0J<snip>GdLamdaaG" "JwaFZkai93b3<snip>laSCtCYmdsYlBrWkdqeVExN3gxN" "mpQTzF6OWJDN3hoY21LNFhaR0NjeENMR0FmOWI4Z<snip>tLQo="

请注意,base64 公钥长 364 个字符,所以我必须使用 bind9 来分解密钥。

$ORIGIN _domainkey. mydomain.com.
mailer                  TXT     ("v=DKIM1; k=rsa; t=y; p=LS0tLS1CRUdJTiBQVUJM<snip>U0liM0RRRUJBUVV"
                                "BQTRHTkFEQ0JpUUtCZ1<snip>15MGdLamdaaG"
                                "JwaFZkai93b3lDK21MR<snip>YlBrWkdqeVExN3gxN"
                                "mpQTzF6OWJDN3hoY21L<snip>Ci0tLS0tRU5E"
                                "IFBVQkxJQyBLRVktLS0tLQo=")

有人能给我指明正确的方向吗?我将不胜感激。

答案1

不要破坏密钥。只需将其添加为单个字符串即可。它会在大多数编辑器中自动换行。我的密钥如下所示。

rsa1._domainkey IN TXT“v=DKIM1;t=s;p=MHwwDQYJKoZIhvcNAQEBBQADawAwaAJhAKq2Ul9a5ixDPQm9WMoPI9fUEZU8FZwfux/O9Sl5+GDCR4rt0CsBzyZj4PY5DTtVHix++EZkR5rVdM4W59DtweKCK6XVntq4Y4GSm+gfZkf/fq45BSCQNilbYux4xqsHQIDAQAB”

我不相信 DKIM 支持重新组合字符串。如果您使用的是多行格式,请验证它是否已重新组合成一个整体。如果使用额外的引号,它可能会中断。您的 DNS 查找显示情况确实如此。

我经常看到 SPF 记录显示为"v=spf1" "a" "-all",读作vspf1a-all。此记录应作为 传递,v=spf1 a -all但可以作为 工作"v=spf1 " "a " "-all"。SPF 确实指定了对引用部分的支持,方法是按原样连接各部分而不引入额外空格。这允许在单词中间换行。

编辑:我正在使用多字符串格式的密钥进行测试。但是,我需要等到 DNS 更新。 [电子邮件保护]告诉我我的新密钥不存在。

我从 bind 获得的格式与文档中让我相信应该获得的格式不匹配。文档表明我应该看到一个字符串连接我输入的片段。相反,我看到的是区域文件中输入的片段。

使用 bind 进行的测试表明文本片段最大可达 255 个字符。超过该长度的部分需要拆分。无论如何,两个这样的片段都可能超出 UPD 数据包的容量。

RFC 的审查表明 2048 位密钥大小可能是实际极限。对实施者发出警告,他们可能必须处理 TXT 片段并按顺序重新组装它们。

答案2

无论如何,你都会混淆公开的数据,这对我们帮助你没有帮助。

例如,我们无法检查以确保您更新了 SOA 序列号,并且此更改已发送到所有 NS 服务器,并且这是通过 SOA 中的负 TTL 完成的,该负 TTL 足够低,以至于 Gmail 不会合理地看到任何数据。

在 DNS TXT 记录中使用多个“...”序列不会合并为一个字符串,而是提供多个字符串。然后由应用程序/协议/规范决定如何处理这些字符串;例如“用空格连接”、“直接连接”、“仅使用第一个”。

DKIM 规范说要直接加入,但这是直接进入实施者容易忽视的领域。我鼓励您提供一个字符串作为 TXT 记录中的唯一字符串,看看这是否会改变一切。

我使用 Exim、DKIM 和 Gmail总是验证它;您的 Exim 配置正确。因此,要么您的 DNS 不可见,要么 Gmail 不喜欢 TXT 记录中的多个字符串。

您还可以尝试一些 DKIM 测试服务:

相关内容