我通过以下命令使用 OpenSSL 创建了private
和public
密钥
openssl genrsa -out private.key 2048
openssl rsa -in private.key -pubout -out public.key
问题是:
private
和public
)是安全的, Openssl 是这样做的首选工具。public.key
添加到域的DNS记录(TXT)中。private.key
使用Nodemailer来设置 DKIM签名。请在您的答案中提供参考
如果上述问题的答案是否定的,我应该使用其他哪个工具进行操作?请提供该工具的命令,这些命令将生成 DKIM密钥(private
和public
)
答案 0 :(得分:1)
是的,如果您的SMTP服务允许您提供显式密钥,则可以。
某些邮件服务要求它们生成密钥对,而您仅获得公用密钥,它们保留了私用密钥,以便在签署电子邮件时使用。如果您的服务允许您向他们提供私钥,那么您就是黄金。
实际上,如果您不使用Amazon的“简单DKIM”方法,则Amazon(AWS)要求您以这种方式进行操作,因此我必须自己完成此操作。生成这两个文件后,无论需要做什么,都需要安全地将私钥发送到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记录名称匹配。该名称应包含一些指示密钥版本或生成日期的内容,因为刷新密钥时该名称将更改。例如,上面的密钥为“ June2020.AmazonSES”。在这种情况下,TXT记录名称应为:
June2020.AmazonSES._domainkey.example.com
永远不要将私钥提供给多个SMTP服务。为每个服务生成唯一的密钥,因此每个服务至少有一个TXT记录。这样一来,您就可以仅更新一个被黑客入侵的软件,而不会损害您使用的任何其他服务。
此外,使用DMARC获取从您那里获取邮件 的邮件处理器,向您发送错误消息(到您在_dmarc TXT记录中定义的邮箱中),以便您可以确定何时工作足以使其脱离测试模式。