[标头'h'标签展开为2行时,DKIM签名失败

问题描述 投票:0回答:1

我正在用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签名及其特殊情况方面有经验。

dkim
1个回答
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字符。

© www.soinside.com 2019 - 2024. All rights reserved.