dkim - 当标题“h”标签展开为 2 行时,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 签名及其特殊情况有经验。
解决方案
请注意,您发布的 DKIM 标头不完整(缺少 bh 和 b 标签)。
但是您在其中添加空格的 DKIM 标头的第二次(宽松)规范化...:to :cc;...
应该是正确的。如果仍然无法验证,请仔细查看其余已签名的标头。也许还有另一个错误。
展开本身不会删除除 CRLF 之外的任何空格。来自https://www.rfc-editor.org/rfc/rfc5322#section-2.2.3
展开是通过简单地删除紧随 WSP 的任何 CRLF 来完成的。
所以在unfloding之后,你就剩下了...:to :cc;...
在下一步中,根据https://www.rfc-editor.org/rfc/rfc6376#section-3.4.2将其缩减为一个空格
将一个或多个 WSP 字符的所有序列转换为单个 SP 字符。
推荐阅读
- docusignapi - 如何将 textTabs 设置为嵌入式签名者,然后删除签名者
- julia - 如何从命令行更新 Julia?
- javascript - React useRef() 为空且不同时为空?
- python - Jaydebeapi 在 python 中为 CharConversionException 给出错误
- c++ - 尝试将 windows 构建系统移植到 linux
- javascript - 如何使用 mongodb 查询运算符处理日期条件?
- javascript - 搜索匹配 for loop google app script
- c# - 如何使用表达式树编写 linq .join 来进行动态查询
- visual-studio-code - 设置 VSCode 时出现“MIDebuggerPath”错误
- c# - 多次Rscript执行增加内存