为什么支持Oauth2.0 的邮箱更安全?
前段时间在贴吧“Gmail 吧”讨论得比较多的可以支持Gmail的邮箱客户端 YoMail被指不安全,而YoMail团队声明 YoMail 采用了 oAuth2.0登录Gmail, 采用SSL传输数据,可以保证用户的密码安全和邮件数据安全,并且声称国内大部分邮箱服务不支持oAuth2.0,大部分邮箱客户端(比如Foxmail)也不支持oAuth2.0,其实是不安全的。那么oAuth2.0到底是什么?为什么支持采用oAuth2.0验证的邮箱服务(如Gmail oAuth验证)更安全?YoMail 到底安不安全?我们接下来会做详细解释。
关于 oAuth2.0
你在网站看到一篇的文章想要分享到微信朋友朋友圈或微博,你在某团购网站网站上买了团购券需要用支付宝,这时候这些网站会跳出微信、微博、支持宝的登录界面,用户输入微信、微博、支持宝的用户名密码后完成操作。这个过程典型的Oauth2.0的验证过程。这里面有几个步骤:
1. 用户在第三方网站上连接微信的时候会被重定向到微信的登录界面
2. 用户接下来在微信的验证页面输入用户名和密码,这个时候,你的用户名和密码是在微信的网站上输入的,而不是第三方网站
3. 验证通过后,微信会返回一个确认界面,这时候用户会被告知第三方程序需要访问用户哪些信息,比如昵称、头像、比如分享到朋友圈的权限
4. 用户点接受后,微信会返回一个二进制 token给第三方应用,随后,第三方应用就用这个token和微信、微博、支持宝交互
在整个过程中,第三方应用并没有获取你的关键信息,如用户名和密码。自oAuth诞生以来,社交网络和电子商务迎来了爆发期,因为他们提供了基于oAuth的API给第三方,既保证了用户的信息安全,又给社交网络和电子商务网站带来巨大的流量。
电子邮件的 oAuth2.0时代
大家都知道,用户有时候更愿意用第三方工具访问自己的邮箱,如Outlook、Foxmail、邮箱大师、YoMail 等都是第三方邮箱工具,这些工具可以访问任何邮箱。
随着移动互联网时代的大爆发,有大量的创业公司在开发各种邮箱客户端,如果保证这些邮箱密码安全?oAuth2.0是答案。
目前国际邮箱大多支持 oAuth2.0 API 接口,如 Gmail, Outlook.com等。但国内大多数邮箱其实还不支持 oAuth2.0登录。这就造成了国内用户对oAuth2.0很陌生,也对创业公司的产品很恐惧。
邮箱的裸密码时代
传统模式下,IMAP(收邮件)和 SMTP (发邮件) 采了用 标准的SASL 协议验证身份, 用户名和密码都是明文(plain-text)。采用这种明文验证方式,邮件客户端需要把用户名密码存在客户端本地,这种方式是非常不安全的。我们发现 Foxmail 或Outlook登录Gmail 只支持这种不安全的验证方式 (密码存储在Foxmail本地),相当于Foxmail和Outlook获取了你的用户名和密码。
明文密码认证方式非常不安全,但很可惜,国内主流的邮箱客户端都采用明文密码认证方式。
以邮件发送协议 SMTP 为例,下图标明了SMTP发送邮件的全过程:
1. 连接到SMTP服务器
2. 使用 HELO 命名验证身份
3. 输入base64加密的邮箱和邮箱密码 (注:base64可轻易破解,和明文没有差别)
4. 发送邮件
(SMTP过程)
这个过程说明了 SMTP协议每次都需要输入邮箱密码,所以邮件客户端必须保存用户的邮箱密码。
oAuth2.0 时代,用户密码得到有效保护
Gmail API 推出SASL XOAUTH2验证方式。在客户端验证开始之前,客户端会被重定向到 Gmail 官网验证页面。接下来,用户的用户名和密码是在 Gmail 官方验证 页面输入的。验证结会束后,Gmail给客户端返回一串二进制的token,随后客户端采用IMAP和SMTP 收发邮件时,不需要再把密码放在邮件头中,而是把这串二进制 token 放在邮件头中。这就解决了第三方应用获取用户邮箱密码的问题。
Gmail Oauth2示意图(来自Google API技术文档)
Oauth2.0 重定向登录网页,中间路由器或代理会不会获取用户名密码?
互联网时间,你的信息从电脑或手机发网服务器,中间肯能或经过代理或无数个路由器,中间路由器或代理其实还是可以截获二进制数据。那怎么解决这个问题? 答案是 SSL (安全传输层协议)
数据在发往服务器之前,先对数据经行加密,而解密的密钥只有目标服务器才有。
YoMail的 “Gmail 安全登录是什么?”
YoMail 登录界面的 “Gmail 安全登录” 就是 Gmail Oauth2.0 入口。用户点击“Gmail 安全登录”,会被重定向到 Gmail Oauth2.0认证界面,接下来的几个步骤其实和YoMail 没什么关系,因为这是用户在和 Gmail 直接交互,中间传输采用SSL,中间代理只负责转发二进制数据,但无法解开经过SSL加密的用户数据,从而保证了用户密码安全。
认证完成之后,YoMail用 Gmail 返回的Token访问Gmail,相反,采用非oAuth2.0访问Gmail需要在邮件头中放置邮箱密码。
SSL 保证传输安全
和普通传输方式相比,SSL方式会在传输前先对数据进行机密,然后传输至邮件服务器,中间路由器或代理就算截获二进制数据也无法解密。
用户使用 YoMail发送电子邮件,Gmail 或其它邮箱,邮件首先会在用户本地经行SSL加密,然后传输至邮件服务器,为了连上Gmail, 中间可能会经过路由器,但采用SSL加密,中间路由器是无法解密的。
但一般的邮件客户端(如Foxmail)并没有默认采用SSL,很多非技术用户很有可能选择了普通传输方式,邮件是明文形式发送的,中间路由器可以轻易截获邮件数据。
总结
国内的邮箱服务和客户端目前还都比较落后,oAuth2.0这样的安全认证协议可以有效保护用户密码安全,希望将来能够普及。
Gmail是鼓励第三方应用采用 oAuth2.0来访问Gmail的,YoMail的“Gmail安全登录”其实就是采用了Gmail oAuth2.0接口,是可以保证用户密码安全的;另外才传输层采用SSL,保证了邮件数据安全。
来源:YoMail投稿。