A DKIM 通过并不意味着每个显示的标头都已签名。每个签名通过其 h 标签选择标头字段并应用指定的 规范化 算法。要确定主题、收件人字段或其他值是否受到保护,请检查传递签名的实际覆盖范围。
从正确的签名开始
记录每个的 d、s、h 和 c DKIM-Signature 标头。将接收者的可信结果与相应的签名相关联,而不是将消息级传递视为所有这些结果的证据。签名必须包含 From,但并非所有其他标头都是强制性的。 RFC 6376 §5.4 解释选择规则并推荐有用的覆盖范围。
如果未选择主题,则对主题的更改本身不会更改受该签名保护的数据。该声明涉及加密覆盖范围,而不是修改后的消息是否可接受。接收服务仍然可以应用独立策略。同样,签名To不会绑定SMTP信封收件人:可见的To标头和RCPT TO地址是不同的数据; RFC 5321 §2.3.1 分隔SMTP 信封来自 消息内容。
考虑重复字段
h 标签不仅仅是一组唯一的名称。在下面 RFC 6376 §5.4.2,重复的名称选择重复的物理事件,从标题块的底部向上进行。例如,如果邮件具有三个“已接收”字段,并且 h 列出了“已接收”两次,则选择底部的两个匹配项。在 h 中添加比签名时存在的名称更多的出现次数可以检测该字段的后续插入。这种技术通常称为过度签名。
不要仅仅因为最上面的字段的名称在 h 中出现过一次就得出结论:该字段已签名。根据实际标题块重建选择。通常应该是单数的重复字段也会引发解析和消息有效性问题; DKIM计算并不意味着可以忽略这些问题。
区分值更改和标准化格式
在简单标头规范化下,所选字段必须完全按签名形式呈现。 宽松的标头规范化 小写字段名称、展开连续行并标准化指定的空格。它不会小写字段值或使不同的主题文本等效。在将失败归因于大写或重新包装之前,请先阅读所选算法。
说明性测试规范:一个受控签名选择“发件人”和“主题”。更改主题词预计会使该签名无效。第二个签名选择发件人但省略主题;相同的主题更改不需要使第二个签名无效。这种对比解释了预期的覆盖范围,而不是对省略主题的认可。
提高签名者的覆盖范围
选择影响收件人解释并可以通过支持的途径保持稳定的字段。检查中的建议 RFC 6376 §5.4.1 以及您的签名者的能力。避免随意签署合法传输会添加或更改的跟踪字段。在受控环境中使用重复字段和格式化案例测试完整的路线。
将预期的覆盖配置文件与签名配置一起记录下来。有用的审查准确说明了哪些标头和事件受到保护,允许哪些规范化以及哪些字段保留在签名之外。这比将DKIM描述为整个消息的密封更有道理。
跟踪合成标头选择
想象一下三个 X-Example 字段,按物理从上到下的顺序排列:最新、中间、最旧。列出h=From:X-Example:X-Example签名选择最旧的,然后是中间的,而不是最新的。由于签名时只有一个 X-Example 存在,将 X-Example 列出两次也包括不存在的情况;稍后插入另一个 X-Example 会更改所选输入并可能使签名无效。这是一个选择练习,而不是执行的签名测试或允许重复的通常单一字段的建议。