DKIM Selector 是什么以及它如何工作:DKIM Selector 解释
在这篇文章中我们将讨论什么是 DKIM selector (DKIM 选择子),为什么需要它们,以及它们在 DKIM 验证中如何工作。
DKIM selector 是什么?
DKIM selector,又名 DKIM 选择子或 DKIM 选择器,是一个被邮件发送服务器用来确定私有密钥来对邮件签名的字符串。在邮件接收服务器上,它被用来在 DNS 中获取公有密钥来验证邮件的完整性。
每创建一个私有/公有密钥对时,将会产生一个 { selector, 私有密钥, 公有密钥 } 元组,其中 selector 被用来获取私有密钥和公有密钥。
如何选择 DKIM selector?
当用户为邮件发送服务(例如 SendGrid)创建一个私有/公有密钥对时,需要指定一个 DKIM selector,该 DKIM selector 可以是任何字符串。
如何找到 DKIM selectors?
当你需要在 DMARCLY 中输入 DKIM selectors 时:
你需要登录到 ESP 的控制台中去找,因为这些是特定于 ESP 的。
比如,如果你使用 Salesforce 来发送邮件的话,你需要登录到它的控制台来找到在 Salesforce 里指定的 DKIM selectors。
为什么需要多个 DKIM selectors?
基于以下的理由,需要有多个私有/公有密钥对:
- DKIM key rotation,下面将会解释;
- 在单一的域名上为多个邮件发送服务设置 DKIM;每个服务可以有自己单独的 selector,这样每个服务的签名/验证不会干扰其他服务。
每当一封邮件发送/验证的时候,只有一对密钥会被用到。这时候 DKIM selector 就会派上用场:该 DKIM selector 被签名服务器用来在密钥对中获取私有密钥,验证服务器则用同一个 DKIM selector 来获取公有密钥。
DKIM selector 在 DKIM 验证中如何工作?
一旦签名服务器确定了 DKIM selector,该服务器就用它来找到对应的密钥,来计算签名。一旦签名计算完毕,该 DKIM selector 被插入到邮件头部的 s=
标签中,然后发送该邮件。
例如,假定选择的 selector 是 s1
,该标签就是 s=s1
。再次提醒一下,该 selector 可以是任何字符串,像 thisismyselector1234
,只要它指向一个有效的私有/公有密钥对就可以了。
这是一个实际的 DKIM 签名头域例子:
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=dmarcly.com; h=content-transfer-encoding:content-type:from:mime-version:subject: x-feedback-id:to; s=s1; bh=jCC0oQBCKfJ10bCI3PCG52Zwowyeh1haGJPACkWN9F4=; b=GzLBVZ0M1hMt1Y7hVT+ajaNrswTv+/FFVMrcaixD70hpTJwAmNwZUKJIzLslSC+iWHby 9gm+yfx6Z1qnXIL6qgBPnlZD4zwyK4D3Umd1je82jniuD7RJWYDqJH0zL+EevCDdoVZGmT IlxzZB6v95bws6539z/5qee+Xmu5KYe4Y=
上述 DKIM 签名所用的 DKIM selector 是 s=s1
。
当邮件抵达接收服务器时,服务器检查邮件头域来找到 s=
标签。如果该标签存在,服务器从中抽取 selector,然后在 DNS 的以下位置寻找公有密钥:
s1._domainkey.example.com
如果公有密钥被找到,服务器用它来检查邮件的完整性。如果检查通过,DKIM 验证成功,否则失败。
如果无法找到公有密钥,DKIM 验证失败。
DKIM key rotation 是什么?
DKIM 已经证明是用来验证邮件完整性的有效手段。但是 DKIM 也有自身的弱点。如果保存 DKIM 的私有密钥的系统被入侵的话,安全性将大打折扣。因此,为了最小化被破解的风险,应该定期改变 DKIM 密钥对。这叫 DKIM key rotation (DKIM 密钥轮换)。
每次密钥轮换的时候,一个新的 {selector, 私有密钥, 公有密钥} 元组将被产生。然后公有密钥将被发布在 DNS 中,你需要重新配置邮件发送服务器来使用新的私有密钥。完成以后,该服务器将会使用新的私有密钥来对所有即将被发送的邮件签名。
原来的密钥应当继续保存7天,然后就可以安全地移除。原因是在邮件发送以后和到达接受服务器之间可能会有延迟。如果在接受服务器上有临时错误的话,这样的延迟可能长达几天。为了让 DKIM 验证通过,接收服务器必须能够在 DNS 中找到对应的公有密钥。
只有当你运行自己的邮件发送服务器的时候,你才需要手工做 DKIM 密钥轮换。如果你使用类似 SendGrid, Office 365, 或者 Google Workspace (前身是 G Suite) 等服务来发送邮件的话,你无需做任何事 -- DKIM 密钥轮换是自动完成的。
DKIM selector VS DKIM 记录
如果你在类似 SendGrid 的邮件发送服务中设置 DKIM 的话,它将会为你创建 CNAME 类型的 DKIM 记录。下面是一条 CNAME 类型的 DKIM 记录:
s1.domainkey.u5022280.wl431.sendgrid.net
你需要在 DNS 中发布类似的记录,使得接收服务器可以访问。留意上面记录中的 s1
部分:这是 DKIM selector,被接收服务器用来获取公有密钥,然后将其用来验证 DKIM 签名。
如何用 DKIM selector 来检查 DKIM 记录
如果你需要检查某个域名上的 selector 是否有 DKIM 记录,可以用这个 免费 DKIM 记录检查器.
输入需要检查的域名和 selector,如下图所示:
在这个例子里,salesforce.com 在 selector s1
上创建了一条长度为 1024 bits 的 DKIM 记录。
参阅 DKIM RFC 来获取更多信息:DKIM RFC6376.
Protect Business Email & Improve Email Deliverability
Get a 14 day trial. No credit card required.
Create Account