技术解析 · 附来源的解答

DKIM 签名邮件头详解

DKIM 签名邮件头是发信服务器添加到邮件中的一个特定字段。它包含邮件正文和选定邮件头的加密哈希,使收件邮件服务器能够验证这封邮件确实经过域名所有者授权,并且在传输过程中未被篡改。

工作机制

发信服务器使用私钥为邮件内容生成数字签名,并将该签名写入 DKIM-Signature 邮件头。收件服务器通过 DNS TXT 记录获取对应的公钥。收件方用公钥解密签名,并将得到的哈希与对所收邮件重新计算的哈希进行比较,从而确认邮件的真实性。

对发件人的重要性

DKIM 能在邮件转发后依然有效,因此提供了 SPF 无法提供的一层信任。它证明邮件内容保持完整,且签名中列出的域名就是实际的发件人。这降低了邮件被标记为垃圾邮件或被伪造的可能性,对维护良好的发件人信誉至关重要。

常见运维错误

一个常见错误是没有把关键邮件头纳入签名,一旦中继修改了这些邮件头,就会导致验证失败。另一个常见问题是密钥轮换失败:服务器上的私钥已更新,但公开的 DNS 记录仍是旧的。您可以使用 SendHQ 免费工具(https://sendhq.cc/tools)检查当前的身份验证状态。

邮件头示例

典型的邮件头如下:DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=example.com; s=selector1; h=from:to:subject:date; bh=hash_of_body; b=digital_signature_value。其中 d 标签指定域名,s 指定用于 DNS 记录的选择器,bh 包含正文哈希。

验证过程

邮件到达后,收件方会解析 DKIM-Signature 邮件头,找出域名和选择器,然后在 DNS 中查询 selector._domainkey.example.com 上的公钥。如果加密检查通过,邮件会被标记为 DKIM-pass;如果哈希不匹配或缺少密钥,结果则为 DKIM-fail 或 neutral。

团队常问的问题

DKIM 会加密邮件正文吗?

不会,DKIM 不会为保护隐私而加密内容。它提供数字签名来确保完整性和真实性,也就是说,内容仍然可读,但任何改动都会破坏签名。

DKIM 签名无效会怎样?

根据域名所有者配置的 DMARC 策略,无效签名可能导致收件服务器提高该邮件的垃圾邮件评分,或直接拒收。

一封邮件可以有多个 DKIM 签名吗?

可以,一封邮件可以带有多个签名。这种情况常发生在邮件经过邮件列表或转发服务时,这些服务会在保留原签名的同时添加自己的签名。

一手资料