首页 > 代码库 > GmailHttpsVertify
GmailHttpsVertify
BlogDate: 2010-01-17
最近,Google针对Gmail被攻击事件,全面默认启用了始终以https访问Gmail的方式了。但是,对于可以动用整个国家力量的黑客来说,从网络通讯数据中(在此不讨论对用户电脑种木马破解https的情况,只讨论在网络通讯数据中破解https的方法)破解https除了暴力破解(暴力破解https即使按照现在的集群计算能力仍旧需要几百至几万年不等)之外真的别无他法了吗?事实并非如此。
我们知道,https的安全性主要是由SSL证书中的公钥和私钥来保证的。浏览器与服务器经过https建立通讯的时候(不考虑SSL代理方式需要用户提交证书的情况,因为我们现在讨论的是浏览器访问网站,和SSL代理无关)会按照以下步骤保证通讯的安全性:
1、浏览器连接服务器,服务器把SSL证书的公钥发送给浏览器
2、浏览器验证此证书中的域是否和访问的域一致(比如用户访问https://mail.google.com/时,浏览器验证服务器发送过来的SSL证书的公钥中的域是否为mail.google.com或*.google.com)并没有过期
3、如果浏览器验证失败,浏览器通知用户证书有问题,让用户选择是否继续
4、如果浏览器验证成功,那么浏览器随机生成一个对称密钥并使用接收到的SSL证书的公钥进行加密并发送给服务器
5、服务器通过SSL证书的私钥对收到的信息进行解密并得到浏览器随机生成的对称密钥
6、最后服务器和浏览器都通过这个对称密钥进行通讯了(为什么不直接使用公钥和私钥进行通讯?因为非对称加密比对称加密效率低)
这个方案看似完美,却无法抵御中间人攻击,攻击者可以按以下步骤实施攻击截取https通讯中的所有数据:
1、攻击者伪造一个Gmail的SSL证书,使其中的域为mail.google.com或*.google.com,并设置合适的证书过期时间
2、攻击者等待访问者的浏览器访问Gmail时,通过DNS劫持或IP伪造(对于有路由器控制权限的黑客来说简直轻而易举)的方法使其访问到攻击者的服务器上
3、攻击者把伪造的SSL证书公钥发送给浏览器
4、浏览器验证SSL证书的域和过期时间都没错,认为访问到的就是Gmail本身,从而把对称密钥发送给黑客服务器
5、黑客服务器把伪造的Gmail网页通过收到的对称密钥加密后发送给浏览器
6、访问者通过浏览器输入Gmail帐户,发送给黑客服务器,黑客服务器通过收到的对称密钥解密后成功获得访问者的Gmail密码
为了抵御这种中间人攻击,SSL证书需要由可信的SSL证书颁发机构颁发,形成一个证书链(比如Gmail的证书链为:最底层为网域mail.google.com,上一层为Thawte SGC CA证书颁发机构,最顶层为很有名的VeriSign证书颁发机构)。那么,浏览器除了需要验证域和有效期外,还要检查证书链中的上级证书公钥是否有效,上级的上级证书公钥是否有效,直至根证书公钥为止。这样就可以有效避免中间人攻击了,因为根证书公钥都是预装在操作系统中的,黑客如果不是暴力破解,无法得到根证书的私钥,如果黑客自己生成一个私钥,浏览器验证根证书公钥的时候发现无法通过操作系统中预装的公钥加密数据后使用这个私钥进行解密,从而判定这个公钥是无效的。这个方案也是现在https通讯通常的方案。
那么,这个现在所有的浏览器正在使用的https通讯方案就无懈可击了吗?答案仍是否定的。我们可以看到,在后一个方案中,https的安全性需要在证书颁发机构公信力的强有力保障前提下才能发挥作用。如果证书颁发机构在没有验证黑客为mail.google.com的持游者的情况下,给黑客颁发了网域为mail.google.com的证书,那么黑客的中间人攻击又可以顺利实施:
1、攻击者从一家不验证mail.google.com持有者的SSL证书颁发机构WoSign那里得到了网域为mail.google.com的证书,此证书的证书链为:最底层为网域mail.google.com,上一层证书颁发机构为WoSign,顶层证书颁发机构为VeriSign
2/3、第二、第三个步骤同上一个方案的中间人攻击的第二、第三个步骤
4、浏览器验证SSL证书的域和过期时间都没错,继续验证证书链:
4.1、最底层的网域mail.google.com证书公钥不在操作系统中,无法验证其访问到的就是Gmail本身,继续验证上一层证书颁发机构
4.2、上一层证书颁发机构WoSign的公钥也不在操作系统中,仍旧无法验证其有效性,继续验证上一层证书颁发机构
4.3、浏览器看到顶层证书颁发机构VeriSign的公钥在操作系统中,认为证书链有效,从而把对称密钥发送给黑客服务器
5/6、第五、第六个步骤同上一个方案的中间人攻击的第五、第六个步骤。黑客成功获得访问者的Gmail密码
然而,不验证域名持有者就颁发证书的情况在国外几乎不会发生,但是在国内就不一定了。针对破解目标,国内证书颁发机构WoSign(在此只是举例国内比较有名的证书颁发机构WoSign,并不代表WoSign今后一定会这么做)很有可能为了上级要求颁发了证书给非域名持有者的黑客,从而使得破解目标的Gmail密码被黑客截取。
GmailHttpsVertify