标头“ h”标签展开为两行时,DKIM签名失败

时间:2019-12-17 10:27:26

标签: dkim

我正在用Java编写电子邮件DKIM签名验证程序。我的问题是特例:

1 –创建主体哈希没有任何问题。我的问题是在对规范化的标头进行签名。

2 –我使用gmail帐户创建测试电子邮件,并且在许多情况下可以正确验证其标头签名。但是只有某些特殊情况会失败。我做了很多测试,当DKIM-Signature头中的h标签有2行时,签名验证失败。

这是标头失败的示例:

...
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
        d=gmail.com; s=20161025;
        h=mime-version:references:in-reply-to:from:date:message-id:subject:to
         :cc;
...

为澄清起见,我想我的问题在这里:

        h=mime-version:references:in-reply-to:from:date:message-id:subject:to
         :cc;

每次将“ h”标签展开到2行时,验证均失败。我熟悉行展开规则,并且可以正确验证在其他位置展开的标头的签名。

标头标准化后,应验证签名的内容为:

...
dkim-signature:v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=mime-version:references:in-reply-to:from:date:message-id:subject:to:cc; bh=pr1Zv1pbjuW/HrdQ6zZ5mYq51Bi+uidXLGOQ265rvEs=; b=

我测试了许多修改签名内容的场景,希望能够正确验证,包括在行折叠位置插入一个“空格”,使签名内容变为:

... h=mime-version:references:in-reply-to:from:date:message-id:subject:to :cc; ...

我知道我的问题很具体。但是希望有人在DKIM签名及其特殊情况方面有经验。

1 个答案:

答案 0 :(得分:0)

请注意,您发布的DKIM标头不完整(缺少bh和b标签)。

但是您在...:to :cc;...中添加了空格的DKIM标头的第二个(松弛)规范化应该是正确的。如果仍然无法验证,请仔细查看其余已签名的标头。也许还有另一个错误。


展开本身不会删除CRLF之外的任何空白。来自https://tools.ietf.org/html/rfc5322#section-2.2.3

  

只需删除任何CRLF即可完成展开     然后是WSP。

因此,在解决问题之后,您将得到...:to :cc;...

下一步,将其缩小为单个空格, 按照https://tools.ietf.org/html/rfc6376#section-3.4.2

  

将一个或多个WSP字符的所有序列转换为单个SP字符。