文档中opendkim-genkey
提到了开关的存在-r
:
限制密钥仅用于电子邮件签名。默认允许密钥用于任何服务。
我想知道这是否意味着密钥实际上可以用于除签名邮件之外的其他用途。以及-r
在生成密钥时包含或不包含开关是否有任何理由。
文档中opendkim-genkey
提到了开关的存在-r
:
限制密钥仅用于电子邮件签名。默认允许密钥用于任何服务。
我想知道这是否意味着密钥实际上可以用于除签名邮件之外的其他用途。以及-r
在生成密钥时包含或不包含开关是否有任何理由。
创建一对适合DKIM
设置使用的密钥的正确方法是什么ssh-keygen
?
给出相应的解决方案openssl
:
# creates a private key
openssl genrsa -out sample.key 1024
# creates a public key
openssl rsa -in sample.key -pubout -out sample.pub
我试图使用DKIM
以下过程生成密钥:
# creates a pair of keys: sample & sample.pub
ssh-keygen -m PEM -t rsa -b 1024 -f sample
# coverts the public key into the PEM format
ssh-keygen -f sample.pub -m PEM -e > sample.pem.pub
PEM
公钥内容示例:
-----BEGIN RSA PUBLIC KEY-----
MIGJAoGBAOO3Emm+KdOKKhwlCjLXIE1R76KlWY6xSVfHsjE3uuMcF0BDKhJS2Kg3
WjhdnV2z5XAQDAxknQvx+sxxbsBye6Zc2VnNA9upDVVlNc4I6zl1N75CY7F1Nfbj
wDrpWqGJuBPsousqj79dJ/JM0pzCn71IkEumU2Ck3AULSnT9MLeZAgMBAAE=
-----END RSA PUBLIC KEY-----
构造DKIM
记录:
v=DKIM1; p=MIGJAoGBAOO3Emm+KdOKKhwlCjLXIE1R76KlWY6xSVfHsjE3uuMcF0BDKhJS2Kg3WjhdnV2z5XAQDAxknQvx+sxxbsBye6Zc2VnNA9upDVVlNc4I6zl1N75CY7F1NfbjwDrpWqGJuBPsousqj79dJ/JM0pzCn71IkEumU2Ck3AULSnT9MLeZAgMBAAE=
我使用https://dkimcore.org/c/keycheck来验证 DNS 记录,这使我无法获取所提供的值,并显示以下消息:
这似乎不是有效的 RSA 公钥: RSA.xs:178: OpenSSL error: bad tag at blib/lib/Crypt/OpenSSL/RSA.pm (自动分割成 blib/lib/auto/Crypt/OpenSSL/RSA /new_public_key.al) 第 91 行。
尝试过这些版本:
$ ssh -V
OpenSSH_7.4p1, OpenSSL 1.0.2k-fips 26 Jan 2017
OpenSSH_8.1p1, OpenSSL 1.1.1d 10 Sep 2019
OpenSSH_9.4p1, OpenSSL 3.1.2 1 Aug 2023
openssl
幸运的是,我得到了上面提到的解决方法。但由于经常ssh-keygen
被 提到作为密钥生成的有效工具,我想知道到底是什么方法? DKIM
我时不时地浏览我的垃圾邮件文件夹(为了科学!)。最近(将 DKIM Verifier 插件添加到我的 MUA 后)我注意到一些电子邮件具有有效的 DKIM 签名,但 Verifier 指出发件人域和签名域不同。这让我想到:
像这样的电子邮件应该被无条件地视为垃圾邮件吗?是否存在此类电子邮件合法的情况?
我的 DMARC 设置似乎无法按预期工作。
首先,有几点需要注意:
mydomain.com
(显然不是真实的);gandi.net
;[email protected]
;[email protected]
:SPF记录设置为TXT
on :mydomain.com
"v=spf1 include:_mailcust.gandi.net include:amazonses.com include:_spf.google.com ~all"
include:_mailcust.gandi.net
允许gandi.net使用mydomain.com
;发送电子邮件include:amazonses.com
允许amazonses.com使用mydomain.com
;发送电子邮件include:google.com
允许google.com使用mydomain.com
;发送电子邮件~all
允许任何其他服务器使用发送电子邮件,mydomain.com
但会导致 SPF 检查失败(softfail)DMARC记录设置为TXT
on :_dmarc.mydomain.com
"v=DMARC1; p=quarantine; sp=reject; pct=5; fo=1; rua=mailto:[email protected];"
p=quarantine
递送未通过 SPF/DKIM 检查的电子邮件并将其标记为垃圾邮件;sp=reject
拒绝使用具有子域的地址发送的电子邮件,例如[email protected]
;pct=5
将政策(p
而不是sp
?)应用于 5% 的电子邮件;fo=1
发送 DKIM 故障或SPF 故障报告;现在奇怪的事情,在这个 DMARC RUA 报告中:
<record>
<row>
<source_ip>40.107.12.85</source_ip>
<count>1</count>
<policy_evaluated>
<disposition>none</disposition>
<dkim>pass</dkim>
<spf>fail</spf>
</policy_evaluated>
</row>
<identifiers>
<header_from>mydomain.com</header_from>
</identifiers>
<auth_results>
<dkim>
<domain>GovSIPF.onmicrosoft.com</domain>
<result>pass</result>
<selector>selector1-GovSIPF-onmicrosoft-com</selector>
</dkim>
<dkim>
<domain>mydomain.com</domain>
<result>pass</result>
<selector>gm1</selector>
</dkim>
<spf>
<domain>administration.gov.pf</domain>
<result>pass</result>
</spf>
</auth_results>
</record>
40.107.12.85
来自outlook.com
但我不使用outlook;GovSIPF.onmicrosoft.com
,GovSIPF 是我的客户之一;administration.gov.pf
是他们用于电子邮件地址的域,例如[email protected]
;我不明白为什么我看到该域的 SPF 阻止administration.gov.pf
,这是否意味着他们发送了一封电子邮件,其地址类似于[email protected]
通过 outlook.com 服务器?
另一个 DMARC 报告略有不同:
<record>
<row>
<source_ip>202.90.68.50</source_ip>
<count>1</count>
<policy_evaluated>
<disposition>none</disposition>
<dkim>pass</dkim>
<spf>fail</spf>
</policy_evaluated>
</row>
<identifiers>
<header_from>mydomain.com</header_from>
</identifiers>
<auth_results>
<dkim>
<domain>mydomain.com</domain>
<result>pass</result>
<selector>gm1</selector>
</dkim>
<spf>
<domain>mydomain.com</domain>
<result>softfail</result>
</spf>
</auth_results>
</record>
202.90.68.50
来自mana.pf
本地 ISP,但我们不使用它;我有一台运行多年的个人电子邮件服务器;发送邮件很少出现问题,所以我从来没有真正了解过像 SPF、DMARC 和 DKIM 这样的东西。最近,在升级系统时,我决定这样做。
SPF 非常简单,因为我使用一个固定的 IP 地址。
DMARC 几乎一样简单;我最初使用“无”的策略来接收报告并将其放置一两个星期,然后将其切换为拒绝。
我现在已经为邮件服务器实现了一个 DKIM 签名过滤器(Courier MTA,没有为此做好准备)。对于我使用的复杂位dkimpy。这也有一个简单的验证工具,它适用于整个消息,它是否有自己的查找等,这意味着它是虚拟证明,因为只有一种使用它的方法(而签名可以通过各种方式配置并且可能离开留给我把它搞砸的空间)。这传递了我认为应该传递的消息,而传递了我认为不应该传递的消息,所以我对它的工作原理感到相当满意;我已经在从服务器收到的消息上运行它。目前,为了尽量减少问题,我只签署了正文和 From 标头。
但是,我的邮件都没有通过我的测试帐户——一个是 gmail,另一个来自我的 ISP。更重要的是,虽然我现在在 DMARC 记录中同时拥有 rua 和 ruf 地址,但我没有收到任何关于它们的报告。以前,他们都像发条一样。
如果我所做的只是关闭过滤器(所以没有 DKIM sig),一切都会再次运行。我已经检查过服务器实际上在所有情况下都在尝试;失败的 DKIM 似乎会超时并关闭连接,从而导致无休止的延迟——这似乎有点奇怪,因为这意味着“被拒绝”的邮件甚至没有被检查,但删除签名就可以了让它再次被接受。我将把它归结为 Courier 日志记录中的模棱两可。
我知道这里没有人受任何法律的约束,但这是正常的政策吗?假设 DKIM 签名错误,接收服务器不应该向我发送 DMARC 报告吗?
所以我现在在一条小溪上。尽管像 MXToolbox 这样的东西给了我很好的色彩,但我还没有找到一个免费的服务来通过接收邮件来主动测试 DKIM 签名,除了一个似乎已经完成了其他服务器所做的事情——从不接受它应该测试的邮件(不知道这是否是一个潜在的线索)。
以下是来自的相关 DNS 记录dig
:
防晒指数:cognitivedissonance.ca. 3600 IN TXT "v=spf1 ip4:138.197.150.177 -all"
大金:
aporia._domainkey.cognitivedissonance.ca. 3600 IN TXT "v=DKIM1; k=rsa; h=sha256; p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAosptGk+J2mdjjc7RWmcnQ3yBqx1JT/lA0bw4GJCzZ+esa0f8rjHhPiW6NnUr64Kf5h0fPEthQhYGTjjw3jAd/3EE28hGA30+jODxEK7A0+5aeI82fWa/ZZk9FvyIhf+UkkX1B0klYhCRW5r91smJ+rwYrr2B6jOrw0DReHTAZ51NACSWI7ov2mA" "UIh2l8blA8hFFBOBwxlzC+smRsYlZCKZfsSMkyS/XIm2m58QNfw/aCHp5VufSrf/hh7f6AGKTgxHfgs+8RBbYdHEM2LAMT+WYsITC3R0OYfgplzWna6PRB9lx+FFzTtT/8XClYfUJ6rwWwM4koeX0yt9gDr/03QIDAQAB"
请注意,邮件服务器的 FQDN 是aporia.cognitivedissonance.ca
,所以我aporia
出于缺乏想象力将其用作 DKIM 选择器。电子邮件域只是cognitivedissonance.ca
. 我应该改用 FQDN(即。aporia._domainkey.aporia.cognitivedissonance.ca
)吗?
DMARC:
_dmarc.cognitivedissonance.ca. 3600 IN TXT "v=DMARC1;p=reject;pct=100;rua=mailto:[email protected],mailto:[email protected];ruf=mailto:[email protected],mailto:[email protected]; "
我注册的 dmarc 验证服务有一些额外的 mailto。不幸的是,他们不直接测试 DKIM 签名。
最后,一个签名的例子:
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple;
d=cognitivedissonance.ca; [email protected]; q=dns/txt;
s=aporia; t=1650468130; h=from;
bh=3N81YR+AxHZqpkdMAh4Jti6JpRmUrlzO5bUjUoWdGeg=;
b=kNzUid2LG8TfHoegur3JzlcktiJT+5A1E2en+IlV/GgDMZWL0Ft/4kE02LGFzb2kTMkav
c9jLUqd2+NCrLDzVRBxgwif++vDwoljCI1X0wvbcCqhfA3uElcCuhCAtBkl/ZNqLR0H1Gjq
XXA801KqyVrvottuv0+PmEOvqQ8skTpBvl4Da8JjQ73Zscm3/5Mfk0dGTLlggNgapszsP9z
nt/1Oi6gzLasX933wIdLZWVex8QNfKr8+MTx6bmpVodaeklR+281u8k1zhCBu5pWrzlavUh
CbWjUm4j3YbeztpG98r9MZOVKbJZyHaiHWcRa1vEq3Cz8AEnRyRkQhd5WtvA==
因此,在 SES 中 - 如我所见,有两种方法可以验证身份:
使用域身份 - 更容易修复外发邮件中的“签名者”和“邮寄者”标题。如果 DKIM/SPF DNS 记录设置正确 - 它运行良好。
但是对于电子邮件身份 - AWS SES 添加了类似“通过 amazonses.com”的内容。现在我希望用我的应用程序的品牌来解决这个问题。因此,当我的客户只想验证电子邮件身份而不是整个域时 - 他们可以通过我的应用程序(以及通过 SES 在幕后)发送电子邮件,但是当电子邮件发出时 - 而不是说“通过 amazonses.com”,它应该将我的应用程序设置为“通过 example.com”,而不是电子邮件身份。
我怎样才能做到这一点?:)
编辑:
2 号很简单,我可以在 SES 中使用 EasyDKIM 实现这一点,但我无法弄清楚如何实现 1 号
如果我使用在 DNS 中没有相应公钥的私钥签署邮件,这是否比根本不签署邮件更糟糕(为了可传递性)?
我知道将取决于接收邮件服务器,它可以执行它喜欢的任何规则,但我希望有关于此的一般指导。
我问的原因是我将控制一些邮件的签名,但我不能确定负责更新 DNS 记录的人是否/何时会完成他们的工作。如果我只是设置我的结束,签名,如果他们很久没有解决添加 DNS 记录,这是一个大问题吗?
我正在开发一种帮助用户发送电子邮件的工具。我计划在后端使用 MTA(邮件传输代理),如 AWS-SES 或 Sendgrid 等。为了使电子邮件成功到达 recipeints 收件箱,用户必须通过配置 DNS 来设置 DKIM/SPF各自域的设置。
现在,如果我以 SES 为例,我知道他们有一个 API,允许我添加一个“身份”并使用该 API 取回所有必要的 DNS 记录。我确信 Sendgrid 和其他 MTA 具有类似的 API,允许添加身份并返回 DNS 记录供用户应用。
我向用户显示返回的 DKIM DNS 设置,他们将其添加到他们的 DNS 提供商,然后当他们发送电子邮件时,recipints 会正确获取它(标题中没有任何“通过 amazonses.com”的东西)
现在举个例子——假设我正在构建的工具托管在 chillybilly.xyz 上,并且其中一个使用我的工具的用户有一个名为 frankthetank.xyz 的域,他们想用它来通过我的平台发送电子邮件.
当用户尝试通过我的平台验证他的域时,我将在 AWS SES 中点击上面提到的 API - 并向用户显示如下内容:
之后,他们可以为成功的 DKIM/SPF 添加这些 CNAMES 和 TXT 记录,并可以开始发送电子邮件。但是如果你仔细观察,他们可以看到我使用的是 SES,因为这些 CNAMES 和 TXT 记录的值。这是我想要避免的事情,相反,我想要那些被称为类似的东西7nuk24xywyawocu6ctqjxmjasiaiq3vq.dkim.chillybilly.xyz
来显示我的品牌,但在后台它仍然会指向正确的 SES。
现在我知道,这样的事情是可能的,因为当我注册 ConvertKit 时,他们向我展示了如下内容:
如您所见,这两个值指向 converkit.com 但是当我通过 DNS 查找运行它们时:
我可以看到它在后台指向属于 Sendgrid 的 MX 和 TXT 记录。我怎样才能做到这一点?(我相信同样的原则也适用于 SES 或任何其他 MTA)
编辑:
我尝试了一些事情 - 我在 chillybilly.xyz (我的项目的域)中设置了 CNAME、MX 和 TXT,并从 frankthetank.xyz 指向了两个 CNAMES 调用spf.frankthetank.xyz
和dkim.frankthetankxyz
https://dnschecker.org/all-dns-records-of-domain.php?query=spf.frankthetank.xyz&rtype=ALL&dns=google
如您所见,我能够获得与 ConvertKit 使用 Sendgrid 所做的非常相似的结果。但它并没有以这种方式得到验证。:(
当我检查这些 DNS 查找(上面的链接)时,我看到的唯一区别是 CNAME 也出现在我的查找中,但在 convertkit 的情况下却没有。所以我认为我接近解决方案,但不确定我缺少什么,有什么想法吗?:)
嗨,我正在尝试设置 OpenDKIM,但它一直抱怨它无法访问密钥文件。我仔细检查了权限和所有权,设置为用户 opendkim 和组 opendkim 并具有 rw 访问权限。我已禁用 selinux 以排除 selinux 问题。我已经多次重新安装了该软件包。不知道在哪里看!有任何想法吗?
错误消息:''' opendkim [691895]:无法从 /etc/opendkim/keys/schots.xyz/20200308.private 加载密钥:权限被拒绝'''
输出ps -l:
[root@anakin schots.xyz]# ps -l 471283
F S UID PID PPID C PRI NI ADDR SZ WCHAN TTY TIME CMD
1 S 981 471283 1 0 80 0 - 47289 poll_s ? 0:00 /usr/sbin/opendkim -x /etc/opendkim.conf -P /run/opendkim/opendkim.pid
输出 ls -ld /etc/opendkim:
[root@anakin schots.xyz]# ls -ld /etc/opendkim
drwxr-xr-x. 3 root opendkim 154 Mar 4 15:28 /etc/opendkim
输出 ls -ld /etc/opendkim/keys:
[root@anakin schots.xyz]# ls -ld /etc/opendkim/keys
drw-------. 3 opendkim opendkim 68 Mar 4 15:28 /etc/opendkim/keys
输出 ls -ld /etc/opendkim/keys/schots.xyz:
[root@anakin schots.xyz]# ls -ld /etc/opendkim/keys/schots.xyz
drw-------. 2 opendkim opendkim 50 Mar 4 15:10 /etc/opendkim/keys/schots.xyz
输出 ls -ld /etc/opendkim/keys/schots.xyz/20200308.private:
[root@anakin schots.xyz]# ls -ld /etc/opendkim/keys/schots.xyz/20200308.private
-rw-------. 1 opendkim opendkim 1679 Mar 4 15:10 /etc/opendkim/keys/schots.xyz/20200308.private
我需要设置 DKIM 来验证我们正在使用的电子邮件提供商。在提供者的文档中,他们要求我们添加两条记录,一条选择器记录和一条策略记录,如下所示:
selector._domainkey.mydomain.com TXT "k=rsa; p=mykeyhere"
_domainkey.mydomain.com TXT "t=y; o=~"
我担心添加这个新策略,因为我们已经在我们的 DNS 区域中设置了很多 DKIM 选择器,没有现有的策略记录(我们使用多个需要代表我们发送电子邮件的第三方提供商)。我想确保我不会通过创建此记录来破坏现有功能。根据我的阅读,每个区域只能有一个策略,因此可以说它是“共享的”。
我对此进行了一些研究,供应商要求的政策t=y; o=~
应该是无害的。似乎说某些电子邮件可能已签名,并以相同的方式处理已验证/未验证的电子邮件(参考)。
尽管如此,这仍会影响我们的生产应用程序,我希望能够确信添加它是安全的。我的假设是否正确,即我可以添加此记录而不会导致我们的大量出站电子邮件被标记为垃圾邮件?还是我错过了什么?