技术解析 · 附来源的解答
DKIM(域名密钥识别邮件)详解
DKIM 是一种邮件身份验证方法,允许发件人对邮件头进行加密签名。该签名可以证明邮件得到了域名所有者的授权,并且邮件内容在传输过程中未被篡改。收件服务器使用发件人 DNS 记录中发布的公钥来验证签名。
工作流程
DKIM 基于公钥基础设施运作。发信服务器使用私钥对特定的邮件头和正文生成数字签名,并以 DKIM-Signature 头的形式附加到邮件上。收件邮件服务器从该邮件头中提取域名和选择器,从 DNS 记录中获取对应的公钥,再解密签名以校验邮件内容的哈希值。
对发件人的重要性
DKIM 提供了 SPF 单独无法提供的信任层,因为它在邮件转发后依然有效。SPF 验证的是发信 IP,而 DKIM 验证的是邮件本身。这可以防止伪造,并降低邮件被主流服务商标记为垃圾邮件的可能性。它也是实施 DMARC 和 BIMI 的前提,这两者都依赖 DKIM 对齐来验证发件人身份。
运维说明与常见错误
常见的失败原因包括:轮换了私钥却没有更新 DNS 中的公钥,或者邮件中继在签名之后修改了邮件正文或邮件头,从而破坏了加密哈希。发件人应使用选择器为不同服务管理多个密钥。您可以使用 SendHQ 免费工具(https://sendhq.cc/tools)验证当前的 DNS 配置。
具体示例
某发件人配置了一个名为 google 的选择器。位于 selector._domainkey.example.com 的 DNS 记录中包含公钥。发送邮件时,DKIM-Signature 头中指定 s=google 和 d=example.com。收件方在该 DNS 路径下查询 TXT 记录,找到验证签名所需的密钥。
DKIM 与 DMARC 对齐
要让 DMARC 通过,DKIM 签名中的域名必须与 From 头中的域名对齐,这称为 DKIM 对齐。如果签名有效但域名与 From 地址不匹配,DKIM 检查会通过,但 DMARC 检查会失败,并可能根据所设定的策略导致投递问题。
团队常问的问题
DKIM 会加密邮件正文吗?
不会,DKIM 不会为了隐私而加密内容。它生成加密哈希来保证完整性和真实性,也就是说收件方可以验证发件人,但邮件内容仍然是可读的。
如果 DKIM 签名无效会怎样?
无效的签名可能导致邮件被标记为垃圾邮件或被直接拒收,因为这表明邮件可能被篡改过,或者发件人未经授权。
可以配置多个 DKIM 密钥吗?
可以。通过使用不同的选择器,您可以为不同的发信服务配置多个 DKIM 密钥,或者在不中断邮件流的情况下轮换密钥。
一手资料
- RFC 6376:DomainKeys 识别邮件(DKIM) — RFC Editor
- RFC 7489:基于域的消息认证、报告与一致性(DMARC) — RFC Editor