Domainkeys 是由雅虎公司推出的一项确保电子邮件来源的真实性和内容的完整性的技术,它能让电子邮件服务商确定某封信是否真实的来自某个域和帮助他们的用户免受“钓鱼 欺诈邮件“的损害,比如用户常收到伪造这些机构的诈骗邮件,然后索取用户的信用卡卡号和密码。 而对于金融机构等公司也有保护用户的交易信息,提高用户满意度,减少客服咨询处理量和品牌保护的作用。

Domainkey的工 作原理是:发信域的负责人首先生成一对公私钥用于对它发出的邮件进行签名,公钥需要部署到公共的DNS 服务器上供所有收信方查询。而私钥则用于加密自己发出的信。这样只有含有用这个私钥加密后的字符串的邮件才是该域发出的邮件。收信方在收到邮件时,可以通 过公用DNS查询它的公钥,然后用该域的公钥来解密验证收到的邮件。如果验证是正确的,这封信就被投递到用户的邮箱里;如果验证失败,邮件将会被丢弃或者 标志。这样用户在所收到的邮件就能确保邮件确实是该域发出。

Domainkey的验证过程:例如user@a.com发送给 user@b.com,a.com的mta会在每封发出的邮件里根据私钥生成一个签名.当b.com的mx服务器在接收邮件时会根据发送方邮件头里的签名 查出selector(即s字段,用于签名.例如dk),则b.com的mx会查找dk._domainkey.b.com的txt记录得到公钥.然后使 用公钥对签名进行核实。

注意:Domainkey是在接收方邮件运营商支持的情况下才有效。否则对接收双方是没有意义的。

1、生成私钥和公钥
a、生成rsa的1024位私钥:
#openssl genrsa -out rsa.private 1024
#cat rsa.public
—–BEGIN PUBLIC KEY—–
MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQC4HNUwh80iMCNlAL3wk8IUvJ+G
VblmXpW0AAoEOrcLkBqgYIgFY8Zh1nXrDMqH06/q0vaPN/tlDtgWchaQkFKoJeE9
QvLvq9dRDKJmosW9FfOevtRY31Bti7smaBZsev9n3g305ON6fOR02al8Kr7mxV8d
U0fkJhe8oym/IWIBBwIDAQAB
—–END PUBLIC KEY—–
b、根据私钥生成公钥:
openssl rsa -in rsa.private -out rsa.public -pubout -outform PEM

2、添加域名txt记录:
s1024._domainkey.yourdomain.com. TXT “k=rsa; t=y; p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQC4HNUwh80iMCNlAL3wk8IUvJ+GVblmXpW0AAoEOrcLkBqgYIgFY8Zh1nXrDMqH06/q0vaPN/tlDtgWchaQkFKoJeE9QvLvq9dRDKJmosW9FfOevtRY31Bti7smaBZsev9n3g305ON6fOR02al8Kr7mxV8dU0fkJhe8oym/IWIBBwIDAQAB; n=A 1024 bit key;”
注:yourdomain.com是指你的所在域,如果你的邮件地址为user@a.com;则为a.com.
rsa为你的加密类型;
p=”MIGf……”,是上述第1步生成的公钥.
3、在MTA上添加domainkey的支持
1、qmail:这个可以按照下面链接(http://jeremy.kister.net/howto/dk.html)来做即可。
2、sendmail:这个可以按照下面链接(http://bbs.chinaunix.net/viewthread.php?tid=797739)来做即可。
3、ironport:这个可以按照下面链接(https://support.ironport.com/DKConfig/AsyncOS_4.6_User_Guide-21-3.html)来做即可。
4、lyirs:这个可以按照下面链接(http://www.lyris.com/help/lm_help/10.0/Content/setting_up_and_using_domainkeys.html)来做即可。
5、postfix:这个可以按照下面链接(http://bbs.chinaunix.net/viewthread.php?tid=1115806)来做即可。