我可以使用Openssl创建DKIM密钥吗



我通过以下命令使用OpenSSL创建了privatepublic密钥

openssl genrsa -out private.key 2048
openssl rsa -in private.key -pubout -out public.key

问题是:

  • 是否使用Openssl创建DKIM密钥(privatepublic(是安全的,是执行此操作的首选工具
  • 我可以将public.key添加到域的DNS记录(TXT(中吗
  • 我可以使用private.key使用Nodemailer设置DKIM签名

请在您的回答中提供参考


如果以上问题的答案是否定的,我应该使用哪种其他工具来做到这一点?请提供将生成DKIM密钥(privatepublic(的工具命令

是的,如果SMTP服务允许您提供显式密钥,您可以。

有些邮件服务要求他们生成密钥对,而你只得到公钥,他们会把私钥藏起来,以便在签署电子邮件时使用。如果你的服务允许你向他们提供私钥,那么你就是黄金。

事实上,亚马逊(AWS(要求你这样做,如果你没有使用他们的";easy DKIM";方法论,所以我不得不自己做这件事。生成这两个文件后,您需要将私钥安全地发送到SMTP服务,无论这需要什么。然后,您需要为DNS创建TXT记录,其中包含密钥的公共部分。它看起来像这样:

"v=DKIM1; k=rsa; t=y; "
"n=AmazonSES DKIM public key valid 2020/6-2020/12; "
"p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDRx3I1vkqUygvM4oxOz"
"JUJfdV/QCvpqnOvtL2CuWuSgKcHH7CmVsb9MXGokHDXYRLgMyR8P2GD6peE"
"CdBwBd2vb643rX6saCb7uirI/NcllRsahtfa2Ier6sF8wBhbkWJRmfVhlvT"
"08BYW06MWS5uAkgdg7pFmpwbpTBkeMQMSLwIDAQAB"

DNS中TXT记录的名称将由SMTP服务决定,或者允许您指定它(称为选择器(。这是一个将被放置在签名标头中的字段,用于将特定的电子邮件标头与正确的TXT记录名称相匹配。名称应该有指示密钥版本或生成日期的内容,因为刷新密钥时该名称会更改。一个例子是";2020年6月。AmazonSES";上面的钥匙。在这种情况下,TXT记录名称应为:

June2020.AmazonSES._domainkey.example.com

您永远不应该将私钥提供给多个SMTP服务。为每个服务生成一个唯一的密钥,因此每个服务将至少有一个TXT记录。这允许你在不影响你使用的任何其他服务的情况下,只更新一个被黑客入侵的服务。

此外,使用DMARC让邮件处理程序从接收邮件,并向您发送错误消息(到您在_DMARC TXT记录中定义的邮箱(,这样您就可以决定何时工作正常,使其脱离测试模式。

最新更新