故障诊断 · 附来源的解答

DKIM 失败“body hash did not verify”诊断

当邮件正文在施加 DKIM 签名之后被修改时,就会出现 DKIM body hash did not verify 错误。收件服务器会重新计算所收到正文的哈希值,发现它与 DKIM-Signature 邮件头中保存的哈希值不一致,从而导致验证失败。

正文被修改的原因

最常见的原因是中间邮件服务器或安全设备改动了邮件内容,包括添加行尾空白、插入追踪像素、追加法律免责声明,或把换行符从 CRLF 改为 LF。正文或 MIME 结构中哪怕只改动一个字符,也会使加密哈希失效并触发失败结果。

规范化设置

DKIM 使用规范化(canonicalization)算法来决定在哈希失败之前允许多大程度的修改。simple 规范化非常严格,任何改动都会导致失败;relaxed 规范化会忽略某些空白字符的变化以及邮件头的大小写差异。如果您的邮件经常被中继修改,改用 relaxed 规范化可以避免不必要的失败。

MIME 与编码问题

对 Content-Transfer-Encoding 处理不当可能导致哈希不匹配。如果中继把邮件从 quoted-printable 转换为 8bit,或修改了字符集,得到的正文哈希就会改变。请确保签名代理和传输层遵循 RFC 2045 中定义的标准,以保持正文完整。

诊断步骤

要解决此问题,请检查失败邮件的原始邮件头。将最初发送的正文与收到的正文进行比较,准确找出修改发生的位置。您可以使用 SendHQ 或其免费工具(https://sendhq.cc/tools)检查当前的 DKIM 记录配置,确保公钥已正确发布在 DNS 中。

预防策略

避免使用会修改内容的邮件中继。如果必须使用会追加页脚的服务,请确保签名发生在投递链的最后一跳。或者,部署 ARC(Authenticated Received Chain),在多跳之间保留原始身份验证结果,让最终收件方能够信任原始签名。

团队常问的问题

正文哈希失败会影响 SPF 吗?

不会,SPF 和 DKIM 相互独立。DKIM 正文哈希失败不会使 SPF 通过结果失效,但如果 DKIM 是主要的身份验证方式,则可能影响 DMARC 对齐。

添加页脚会导致此错误吗?

会。在邮件签名之后添加企业免责声明或邮件列表页脚,会改变正文内容,从而使 DKIM 正文哈希失效。

simple 和 relaxed 规范化有什么区别?

simple 非常严格,任何改动都会导致失败。relaxed 允许空白字符和邮件头大小写的细微变化,因此更能承受中继造成的修改。

修改邮件主题会导致正文哈希失败吗?

不会,主题属于邮件头。修改主题会导致邮件头哈希失败,而不是正文哈希失败。

一手资料