如何在DKIM签名中计算'b'参数

时间:2019-06-16 00:45:18

标签: smtp rsa dkim

我正在尝试使用DKIM协议对通过SMTP命令(使用telnet)发送的消息进行签名,我已在dkim官方网站上应用了所有步骤,如果我验证了它,它仍然是我可以计算出'b'参数的方式用私钥?或使用其他方法? 谢谢

5 个答案:

答案 0 :(得分:0)

原始标题:

Subject: ddddd
From: btt@domain.com
To: email@gmail.com

带有DKIM-SIGNATURE的规范化标头:

subject:ddddd
from:btt@domain.com
to:email@gmail.com
DKIM-Signature: v=1;
a=rsa-sha1;
c=relaxed/relaxed;
s=selector1;
d=domain.com;
h=subject:from:to;
i=btt@domain.com;
bh=rcr9nmkeqsjAGn29CUiUNJFRSmc=;
b=

用于对内容进行签名的RSA命令(标头+ Dkimsignature)

openssl dgst -sha1 -sign privateKey.pem content.txt | base64

答案 1 :(得分:0)

subject:ddddd
from:btt@domain.com
to:email@gmail.com
dkim-signature:v=1; a=rsa-sha1; c=relaxed/relaxed; s=selector1; d=domain.com; h=subject:from:to; i=btt@domain.com; bh=rcr9nmkeqsjAGn29CUiUNJFRSmc=; b=

答案 2 :(得分:0)

这是要签名的新内容:

subject:ddddd
from:btt@domain.com
to:email@gmail.com
dkim-signature:v=1; a=rsa-sha1; c=relaxed/relaxed; s=selector1; d=domain.com; h=subject:from:to; i=btt@domain.com; bh=rcr9nmkeqsjAGn29CUiUNJFRSmc=; b=

答案 3 :(得分:0)

不幸的是,它与PowerMta生成的签名不匹配。

我的签名生成的

'b':

lNLa3tKsq6IEotwq6Go5vPUjj6zbzpIEqC7Mr90SZFrXPVBNZbHyO4igroLE5Ax77lAAAwEX9+cN
TCeIbzYE08K7kB7I4/k8McDe3T5V+T2jcZuR3ukWK12BkQBAmFZNogynId0tt1WPXK3zHDGdKpHC
oxu5gKfrEVNsHo7gyRc=

使用PowerMta测试后的标头:

    DKIM-Signature: v=1; a=rsa-sha1; c=relaxed/relaxed; s=selector1; d=domain.com; h=Subject:From:To; i=btt@domain.com; bh=rcr9nmkeqsjAGn29CUiUNJFRSmc=; b=j/jYKloUFEbmzj5JdwmR7MCBB+UtuJq5V0wImYElaY/xob8CnRY39Z0TfPonp4y2qtIE/wpqwnT0
   YrHcNM8BY3uQ3ovm3pq7lTmwvM6XqA4rgnlhcyZnQO9uoUSGebsbR8KBhwZSpolF7UEcr8TSQdfO
   OG+fDZIHeq6G7DAg5cQ=
Subject: ddddd
From: btt@domain.com
To: email@gmail.com

答案 4 :(得分:-1)

本文档对此进行了全部解释:https://www.ietf.org/rfc/rfc6376.txt

首先,您必须规范化要签名的标头字段,包括要生成的DKIM-Signature标头,然后使用所选的签名算法对其进行签名。

“简单”标题规范化算法

“简单”标头规范化算法不会更改标头 领域。标头字段必须呈现给签名或 验证算法与消息中的内容完全相同 签名或验证。特别是,标头字段名称不得为 大小写折叠,绝不能更改空格。

“松弛”标题规范化算法

“松弛”报头规范化算法必须应用 依次执行以下步骤:

  • 将所有标题字段名称(而不是标题字段值)转换为 小写。例如,将“ SUBJect:AbC”转换为“ subject:AbC”。

  • 按如下所述展开所有标题字段连续行 RFC5322;特别是嵌入了终结符的行 连续的标头字段值(即CRLF序列后跟 WSP)必须在没有CRLF的情况下进行解释。实施必须 不要在标题字段值的末尾删除CRLF。

  • 将一个或多个WSP字符的所有序列转换为单个SP 字符。这里的WSP字符包括 线折叠边界。

  • 在每个展开的标头字段末尾删除所有WSP字符 值。

  • 删除冒号前后剩余的所有WSP字符 将标题字段名称与标题字段值分开。的 结肠分隔符必须保留。

规范化DKIM-Signature标头

对所有希望签名的标头进行规范化之后,就需要对正在生成的DKIM签名应用相同的规范化。

很显然,这时您还没有b=值,因为对规范化标头进行签名的结果是b=标记的值。

您需要做的是构造标题,但将b=标签留空。

例如:

DKIM-Signature: v=1; a=rsa-sha256; d=example.net; s=brisbane;
  c=simple; q=dns/txt; i=@eng.example.net;
  t=1117574938; x=1118006938;
  h=from:to:subject:date;
  bh=MTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTI=;
  b=

对规范化的标题进行签名

一旦您对所有要签名的标头(包括要生成的DKIM-Signature标头的部分)进行规范化,就需要使用算法和私钥(不是公钥)对结果进行签名。 !),然后对结果进行base64编码,并将其附加到您生成的DKIM-Signature标头中。

在上面的示例中,您将使用RSA-SHA256算法。

更新

如果您要签名的原始邮件标题看起来像这样:

Subject: ddddd
From: btt@domain.com
To: email@gmail.com

如果PowerMTA生成的DKIM-Signature标头如下所示:

DKIM-Signature: v=1; a=rsa-sha1; c=relaxed/relaxed; s=selector1; d=domain.com; h=Subject:From:To; i=btt@domain.com; bh=rcr9nmkeqsjAGn29CUiUNJFRSmc=; b=j/jYKloUFEbmzj5JdwmR7MCBB+UtuJq5V0wImYElaY/xob8CnRY39Z0TfPonp4y2qtIE/wpqwnT0
 YrHcNM8BY3uQ3ovm3pq7lTmwvM6XqA4rgnlhcyZnQO9uoUSGebsbR8KBhwZSpolF7UEcr8TSQdfO
 OG+fDZIHeq6G7DAg5cQ=

然后您应该要签名的文本如下所示(假设您希望您的b=值与PowerMTA生成的b=值相匹配):

subject:ddddd
from:btt@domain.com
to:email@gmail.com
dkim-signature:v=1; a=rsa-sha1; c=relaxed/relaxed; s=selector1; d=domain.com; h=Subject:From:To; i=btt@domain.com; bh=rcr9nmkeqsjAGn29CUiUNJFRSmc=; b=