如何使用openssl验证电子邮件中的DKIM签名?

6
我已经为我的postfix设置了opendkim,现在所有的外发邮件都有DKIM-Signature头。我想要做的是手动验证这些信息是否获得正确的签名(不使用DNS和外部工具,最好只用openssl),因此我需要以下数据作为输入:
  • 一封电子邮件的DKIM-Signature头
  • DKIM Selector,DKIM Domain
  • DKIM私钥
  • 以记录形式提供的DKIM公共签名,需要将其放入DNS中
问题是如何使用类似openssl的CLI工具解密和/或验证DKIM-Signature与DKIM公共签名?
2个回答

4

从邮件源直接验证

  • 下载电子邮件,通常是.eml文件

  • 安装Python

  • pip install dkimpy

  • dkimverify < email_file.eml

    或者你可以

    • dkimverify
    • 粘贴来源
    • Ctrl+D

来源

其他方法


0

可以实现,但比较复杂,最好的方法是使用工具,但如果您坚持要这样做,下面是步骤:

  1. 准备需要验证的标头,并在结尾添加dkim-signature,但不包括实际签名哈希。

  2. 根据使用的规范化算法对标头进行规范化。

  3. 如果为正文设置了限制,则需要将其剪切后进行规范化。

  4. 计算正文哈希值,如果与dkim签名中的哈希值相同,则继续。

  5. 使用OpenSSL验证标头哈希值,提供以下参数:

    a. 标头哈希值。

    b. 规范化的标头。

    c. 公钥

    d. 使用的哈希算法(SHA1或SHA256)。

我无法为您提供示例命令,因为我已经使用PHP的openssl_verify()函数来执行此操作。

如果您已经完成此操作,请告诉我您是如何实现的。


感谢提供这些步骤,我会尝试有一天去实现它,但目前我们决定使用整个堆栈来提高效率(和速度)- 这意味着在邮件流程中使用DNS服务器和Amavist进行验证。这会稍微减慢验证的速度,但可以确保DKIM将与真正的验证服务一起工作。 - Alex F
你考虑过 OpenDKIM 吗?它是一个 Linux 应用程序,可以安装并将电子邮件传递给它进行验证。 - transilvlad

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接