我希望能够对用户发送到我的应用的电子邮件进行身份验证。为了简单起见,我只能为gmail用户这样做,因为gmail使用DKIM签署所有外发电子邮件。
如何查找gmail的DKIM公钥?我尝试使用http://www.protodave.com/tools/dkim-key-checker/,但找不到gmail的选择器名称。
然后我如何验证邮件的真实性? HMAC?是否有一些API /服务可以做到这一点?
答案 0 :(得分: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提示符下,在Google的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/)的麻烦。它不仅会验证收到的邮件,还会签发您的外发邮件。