(新版)对gaeproxy的“https代理”功能之分析和说明

  • 经过我旧版文章分析后,gaeproxy的作者Max Lv很诚恳和大度地在项目主页和官方twitter帐号上解释了“https代理”功能,并将本地址作为说明放在项目主页上,故我将较为耸人听闻的旧版移至另一地址,在本地址重做了一份简单的说明。
  • 对我的文章给作者带来的一些误解表示歉意。
  • 再次声明,我相信作者从未也永远不会谋求窃取/篡改用户数据,作者提供的该功能是基于善意,我个人只是指出整个流程中的一个安全风险,并希望所有用户都有所了解之后自己选择是否要使用。

  gaeproxy是goagent在android上的客户端,作者是Max Lvgoagent在google code页面上将其作为android上使用goagent的解决方案来介绍。

  说明1:gaeproxy的“https代理”功能
  该功能实际上是将https的请求和回应通过作者提供的代理服务器来进行代理,原理如下:
  没有打开“https代理”功能时,所有的流量都通过goagent服务器端,而goagent服务器端是部署在google appengine(GAE)上的,在客户和服务器之间,只有google的服务器存在,这个过程中只要你信任google的服务器,就是相对安全的。如图:

gaeproxy-analysis-01

  打开“https代理”功能时,https流量(往往是敏感数据,不过会被加密,并非明文)会通过作者提供的服务器代理,而不经过goagent的服务器端,这时候如果有人攻破了作者提供的服务器,在其上进行中间人欺骗,或者解密用户与目的服务器交换的数据(并非完全不可能),会给用户造成无法估量的损失。如图:

gaeproxy-analysis-02

  说明2:风险所在
  如上文所述,典型的goagent架构全程只通过google所维护的服务器来代理,虽然由于gae不支持https connect,所以在google的服务器上https请求会被解码并重编码(我理解如此,未必正确),所以不管是PC还是android上访问https网站,都需要导入证书。
  而gaeproxy作者提供的https代理不经过google的服务器,而是经过作者自己提供并维护的服务器,考虑到人力物力上的差距,作者维护的服务器在安全性上不如google的服务器来得可信,这就是我们所担心的。

  说明3:风险到底有多大
  实际上这种风险与你购买收费VPN、SSH代理的风险是一样的,甚至小于使用免费VPN、SSH的风险(包括著名的地下铁),存在恶意的VPN和SSH提供商能够给你带来更大的损害。我只是提出了整个流程中的一种可能性,而且不满于作者(当时)未明示这一事实而已。实际上我猜测是由于android设备上直接使用典型goagent模式时,https的性能比较差(我实测如此),所以作者才添加了“https代理”这一功能,并非出于恶意,相反自己花费了经费。
  实际上goagent的作者也承认,PC上典型的goagent架构也是不安全的,我们只是信任google的维护能力而已,并不是说goagent就是安全的。
  实际上翻墙的方法无非两种,一种是通过各类代理,其中加入了一道甚至几道服务器后,信息被窃取/篡改的可能性显然会增加;另一种是通过对网络协议的修改,如西厢计划等小众方案,由于需要使用别人编写的软件,一样存在风险。没有一种翻墙方式是不增加信息被窃取/篡改的风险的,只能说一定程度上降低了被GFW窃取/篡改的风险而已。

  总结:既然gaeproxy的作者明示了“https代理”功能的原理,我对这个软件及其服务并无进一步的意见,我推荐大家继续使用这个软件。就我个人而言,我不会继续使用“https代理”这个功能,但如果你选择继续使用,风险并没有多么可怕。

Author | William Gates

从2006年开始写Blog,从那时的苦情技术宅到现在初为人父的资深律师,删掉年少的刻奇、过时的技术文章、幼稚的社会评论,重新出发。