2012-11-12 129 views
1

我希望能够验证用户发送给我的应用程序的电子邮件。为了简单起见,我只能为gmail用户这样做,因为gmail使用DKIM对所有外发电子邮件进行签名。验证Gmail发件人

如何找到gmail的DKIM公钥?我尝试使用http://www.protodave.com/tools/dkim-key-checker/,但我找不到gmail的选择器名称。

然后我该如何验证消息的真实性? HMAC?有没有一些API /服务可以做到这一点?

回答

3

我从Gmail向另一个帐户发送了测试消息,然后查看了DKIM信息的标题。我得到了:

DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; 
    d=gmail.com; s=20120113; 
    h=mime-version:x-received:date:message-id:subject:from:to 
    :content-type; bh=fd9JXP6Ngw+hgcG1EbBo7GpsrIIZzdJb9Q/14o9e5C8=; 
    b=sYlJC2oYWzBUOPIo0jtR4iFsIVqUlwo2QRcG1186hg5ai0oO1nisiOJUD+QXjt (snip) 

这里的选择器是“20120113.”从shell提示下,查询谷歌的DNS与该选择相关的公共密钥:

dig 20120113._domainkey.google.com TXT 

这导致:

20120113._domainkey.google.com. 86400 IN TXT "k=rsa\; p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAp5kQ31/aZDreQqR9/ikNe00ywRvZBFHod6dja+Xdui4C1y8SVrkUMQQLOO49UA+ROm4evxAru5nGPbSl7WJzyGLl0z8Lt+qjGSa3+qxf4ZhDQ2chLS+2g0Nnzi6coUpF8r" "juvuWHWXnzpvLxE5TQdfgp8yziNWUqCXG/LBbgeGqCIpaQjlaA6GtPbJbh0jl1NcQLqrOmc2Kj2urNJAW+UPehVGzHal3bCtnNz55sajugRps1rO8lYdPamQjLEJhwaEg6/E50m58BVVdK3KHvQzrQBwfvm99mHLALJqkFHnhyKARLQf8tQMy8wVtIwY2vOUwwJxt3e0KcIX6NtnjSSwIDAQAB" 

公钥是p之后的一切=。

但是......该选择器看起来像是基于日期的,这意味着Google可能会定期旋转它。你不能相信选择器总是有效的。

因此,如果您想要可靠地验证传入邮件,请自己省去编写自己的验证工具并使用OpenDKIM(http://opendkim.org/)的麻烦。它不仅会验证传入的邮件,还会签名您的传出邮件。