email - 我可以使用 Openssl 创建 DKIM 密钥吗
问题描述
我通过以下命令使用OpenSSLprivate
创建并键入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)。 - 我可以使用Nodemailer
private.key
设置DKIM 签名吗?
请在您的回答中提供参考
如果上述问题的答案是否定的,我应该使用哪个其他工具来做到这一点?请提供将生成DKIM 密钥的工具命令(private
和public
)
解决方案
是的,如果您的 SMTP 服务允许您提供显式密钥,您可以。
一些邮件服务要求他们生成密钥对,而您只获得公钥,他们将私钥隐藏起来,以便在签署电子邮件时使用。如果您的服务允许您向他们提供私钥,那么您就是黄金。
事实上,如果你不使用他们的“easy DKIM”方法,亚马逊 (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 记录中定义的邮箱),这样您就可以决定什么时候工作足够好,可以将其退出测试模式。
推荐阅读
- c++ - 使用 `hana::is_valid` 因 const 引用而失败
- web2py - web2py 我需要在 CRYPT 中以编程方式更新密码字段
- html - 背景图像不会显示在 CSS 容器中
- c# - 每次更改文件时 xsp Web 服务器都会关闭
- .net-core - 针对 .Net Standard 2.0 的新 VS Azure Function 项目因 InternalServerError 而失败
- python - 组合和的记忆与非记忆时间复杂度分析
- python - 将 ChainMap 数据输出导出为 CSV
- php - 基于某些条件的PHP分页
- javascript - 在一个范围内转换度数
- php - 在 Digital Ocean(Ubuntu、PHP、Slim、Twig、PuTTY、FileZilla、Apache)上托管 PHP 项目后,路由器无法工作