我想了解用于验证电子邮件的SPF / DKIM / DMARC堆栈。
我知道SPF适用于SMTP“mail from”/ envelope-from。
但即使在stackoverflow本身,我也发现关于DKIM是在envelope-from还是实际的SMTP负载/电子邮件/标头-来自方面存在矛盾的信息。
我想了解用于验证电子邮件的SPF / DKIM / DMARC堆栈。
我知道SPF适用于SMTP“mail from”/ envelope-from。
但即使在stackoverflow本身,我也发现关于DKIM是在envelope-from还是实际的SMTP负载/电子邮件/标头-来自方面存在矛盾的信息。
简短回答...
SPF 验证发送 IP 地址的信封,DKIM 验证邮件负载,DMARC 将两者绑定在一起,并指示任一项失败时所需的处理方式。
较长回答...
DKIM 在发送服务器上应用于已编写的消息,使用私钥,然后由接收服务器使用公钥通过 DNS 进行验证。
DKIM 规范允许签名者选择签署哪些标头字段,但必须始终签署 From: 字段,以及指定长度(可以为零)的正文,在作者的心情中可能包括消息负载末尾的正文和/或 附件。
DKIM 与 SMTP 路由无关,因为它在 RFC 5322 消息上运行,即传输邮件的标题和正文,而不是在 RFC 5321 中定义的 SMTP 信封。因此,DKIM 签名在多个 MTA 上进行基本中继时仍然有效。
DKIM 允许 签名者 以严格或放松的方式传达其认为合法的电子邮件内容。通过这种方式,签名者可以保证一些关键内容,同时允许对空格和标头包装进行某些微不足道的重写。它不能直接防止或披露企图滥用,但可以通过接收服务器在签名者允许的程度上验证内容,以进行法医学分析。
SPF 发布在 DNS 中,并由接收服务器进行测试。
SPF 规范允许域的 DNS 保证哪些发送 IP 和其他解析为 IP 的机制被允许/禁止成为该域的电子邮件发送源。它只针对使用 RFC 5321 中定义的 SMTP 信封进行测试,使用 MAIL FROM 或 HELO 值之一。
DMARC 是发布在域中的策略,并由接收服务器进行验证。
它允许发送域通过符合要求的接收服务器报告来监视滥用情况,并指示如何处理任何 SPF 或 DKIM 失败。此外,它可以用于 对齐 在 SPF 和 DKIM 中找到的域,并用于识别当 SPF 和 DKIM 都通过时发生滥用,但每个域使用不同的域。
DKIM-Signature:
头部中,您可以使用 d=
属性指定签名域。该值还决定了在 DNS 中查找公钥的位置。您并未完全回答这个域名是否应该/必须对应于电子邮件通信的 From:
标头或其他部分。 - pabouk - Ukraine stay strongd=
之间没有联系。只要你知道该域的私钥并使用该私钥指向公钥,就可以使用 任何 域的私钥签署发件人邮件。这很常见 - 例如,Google 或 MS 可能会使用自己的私钥来签署来自“您自己的域”的消息。 - EMLFrom:
中的域将被测试是否与DKIM-Signature:
头部的d=
属性松散或严格对齐。DKIM本身不会检查这一点。例如,请参见:https://mxtoolbox.com/dmarc/dkim/dkim-alignment - pabouk - Ukraine stay strongFrom:
字段的值没有以任何方式“测试”,除非查找它是否自签名以来已更改。例如,它可以使用“foo.com”的私钥进行签名,但可能包括标题From: me@bar.com
。如果有人截取邮件并将其更改为From: donald@duck.com
,则哈希将更改,DKIM应/将报告失败。 - EML