[2018-10-30 12:40:42 最后更新]
邮件 dkim 的公钥 dns 记录的写法
网上的一些文章基本没说清,其实可以用 https://dkimcore.org/tools 来生成一个,大概的样子类似于
'1540873152.newbt._domainkey.newbt.net:v=DKIM1;p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQChSxflOjrKa4RR4ey/6/x3evHY5KW5yIkf4Zh+AKgr4qqdfY07Eo6LDYPHLc1v5I1zgBlEKGYlxeU97GpZmvEkhPmkIaUfBiokwNbCkFdzrmwd1BwNOkIvQdKpXpNHWvggB8GfQ4guiwwg1Ho8mbA+PnCJwS0KS2H1p1vGMPChtwIDAQAB:3600::
看到这个仍然让初学者一头雾水,其实这里面 newbt.net 表示你要添加的所在域名,而 1540873152.newbt._domainkey 是要在 dns 解析中添加的 txt 记录的名称.
而这个 txt 记录的内容是从 v=DKIM1 开始到 ":3600" 之前的内容. 网上一般都这样说,其实大可不必,解析一下大家就清楚了:
为了校验 dkim 签名,对方必须要知道你的公钥,而公钥所以在域名会在邮件中告诉对方,也就是 "1540873152.newbt" 这部分是直接在邮件中说明了的,然后对方自己补全后面的域名.
然后对方就来访问这个 dns txt 记录,所以这个 txt 记录里肯定是要有公钥,而公钥就是 base64 格式的 rsa 公钥,所以实际上这个记录可以自己写,基本上就是 x509 的证书格式,我们的就是用 golang 自己生成的.
光有这个公钥还不行,还要告诉对方协议的版本等,所以就有了 "v=DKIM1" 这些参数,然后它们之间用 ";" 分隔,而公钥自身的参数名是 "p" ,所以你们才会看到有 p=..... 那一长串的东西.
另外 1540873152 这个在 dkim 加密中就是所谓的 "Selector",我没仔细读 rfc 原文,不过这里它显示是标记你域名下的某台具体的机器的(因为大的网站一个域名下的邮件服务器可能有多台发送 ip),对于一般只有
一个 ip 的其实可以直接指定 default,无论是哪个都必须和你的那台机器中的配置相同.例如我们的 dns 记录为 :
v=DKIM1; k=rsa;
p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDbSa1adFEYxdQZG0cHOXJzLErA6PMBJdpF1miA7XPdb6cqL6R9jFbhTdK4o2WD/i0o45f/AHpL+l3faxOItbnoP4ol99abvl1LXgXjMXNEdUTH/J8XZCwKLx181cvVE5MDk7XOMCwaX18FZ01IAusEPBsYMCA8MYSEZNp3+HmlQQIDAQAB
对应的主机名为:
default._domainkey