我可以使用 Openssl 创建 DKIM 密钥吗
Can I create DKIM key using Openssl
我通过以下命令使用 OpenSSL 创建了 private
和 public
密钥
openssl genrsa -out private.key 2048
openssl rsa -in private.key -pubout -out public.key
问题是:
- 使用 Openssl 创建 DKIM 密钥(
private
和 public
)是安全的,Openssl 是首选工具。
- 我可以将
public.key
添加到域的 DNS 记录 (TXT) 中吗?
- 我可以使用
private.key
设置 DKIM 签名 使用 Nodemailer.
please provide references in your answer
如果上述问题的答案是否定的,我应该使用哪个其他工具来做到这一点?请提供将生成 DKIM 密钥(private
和 public
)
的工具命令
可以,如果您的 SMTP 服务允许您提供显式密钥。
一些邮件服务要求它们生成密钥对,而您只能得到 public 密钥,它们会保存私钥以供签名时使用 e-mail。如果您的服务允许您向他们提供私钥,那么您就是黄金。
事实上,如果您不使用亚马逊 (AWS) 的“简易 DKIM”方法,亚马逊 (AWS) 会要求您这样做,所以我不得不自己做。生成这两个文件后,您需要将私钥安全地发送到您的 SMTP 服务,无论这需要什么。然后您需要为您的 DNS 创建 TXT 记录,其中包含密钥的 public 部分。它看起来像这样:
"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 服务决定或允许您指定(称为选择器)。这是一个将放入签名 header 中的字段,以将特定的 e-mail header 与正确的 TXT 记录名称相匹配。该名称应该包含指示密钥版本或生成日期的内容,因为当您刷新密钥时该名称会更改。例如上面的键是“June2020.AmazonSES”。在这种情况下,TXT 记录名称应为:
June2020.AmazonSES._domainkey.example.com
切勿将私钥提供给多个 SMTP 服务。为每个生成一个唯一的密钥,因此每个服务至少有一个 TXT 记录。这允许您只更新被黑客攻击的那个,而不会影响您使用的任何其他服务。
此外,使用 DMARC 让邮件处理者从您 那里收到邮件,向您发送错误消息(发送到您在 _dmarc TXT 记录中定义的邮箱),这样您就可以决定什么时候一切正常,可以退出测试模式。
我通过以下命令使用 OpenSSL 创建了 private
和 public
密钥
openssl genrsa -out private.key 2048
openssl rsa -in private.key -pubout -out public.key
问题是:
- 使用 Openssl 创建 DKIM 密钥(
private
和public
)是安全的,Openssl 是首选工具。 - 我可以将
public.key
添加到域的 DNS 记录 (TXT) 中吗? - 我可以使用
private.key
设置 DKIM 签名 使用 Nodemailer.
please provide references in your answer
如果上述问题的答案是否定的,我应该使用哪个其他工具来做到这一点?请提供将生成 DKIM 密钥(private
和 public
)
可以,如果您的 SMTP 服务允许您提供显式密钥。
一些邮件服务要求它们生成密钥对,而您只能得到 public 密钥,它们会保存私钥以供签名时使用 e-mail。如果您的服务允许您向他们提供私钥,那么您就是黄金。
事实上,如果您不使用亚马逊 (AWS) 的“简易 DKIM”方法,亚马逊 (AWS) 会要求您这样做,所以我不得不自己做。生成这两个文件后,您需要将私钥安全地发送到您的 SMTP 服务,无论这需要什么。然后您需要为您的 DNS 创建 TXT 记录,其中包含密钥的 public 部分。它看起来像这样:
"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 服务决定或允许您指定(称为选择器)。这是一个将放入签名 header 中的字段,以将特定的 e-mail header 与正确的 TXT 记录名称相匹配。该名称应该包含指示密钥版本或生成日期的内容,因为当您刷新密钥时该名称会更改。例如上面的键是“June2020.AmazonSES”。在这种情况下,TXT 记录名称应为:
June2020.AmazonSES._domainkey.example.com
切勿将私钥提供给多个 SMTP 服务。为每个生成一个唯一的密钥,因此每个服务至少有一个 TXT 记录。这允许您只更新被黑客攻击的那个,而不会影响您使用的任何其他服务。
此外,使用 DMARC 让邮件处理者从您 那里收到邮件,向您发送错误消息(发送到您在 _dmarc TXT 记录中定义的邮箱),这样您就可以决定什么时候一切正常,可以退出测试模式。