您的位置:首页 > 理论基础 > 计算机网络

聊聊HTTPS与Android安全(二)

2015-07-03 11:25 513 查看
“互联网仍然处于开端的开端阶段(the beginning of its beginning)”《失控》——凯文.凯利



中间人攻击

中间人攻击(Man-in-the-MiddleAttack,简称“MITM攻击”)是一种“间接”的入侵攻击




假设A是服务器,B是用户,B向A发起HTTPS连接,于是A需要将自己的公钥发给B。中间人C通过某种手段可以截获并伪造AB之间的通讯(比如GFW或者共享wifi等)。

那么C可以伪造一份A的公钥,并保有这分假公钥的私钥;然后截获A发给B的真公钥,并伪造自己的身份,让B认为自己就是A,并把伪造的公钥发给B;

如此一来,B会通过伪造的公钥给A发送密文,而C就可以截获这些密文并利用手中的私钥轻易的解密这些密文了;

然后将这些密文通过正确的公钥转发给服务器A,这样AB之间的通讯仍将继续,AB在毫不知情的情况下被中间人把证书“偷梁换柱”,从而达成了中间人攻击,AB之间的非对称加密形同虚设,从而TLS协议的对称加密的密钥就能被C轻易的获取。

如此,TLS完全告破。

总结:如果你安装了 中间人(代理服务器)自己生成的根证书,那么就中招了。

举个例子:

Fiddler对https的抓取就是靠中间人攻击的方式。




打开Fiddler ,Tools->Fiddler options->HTTPS中的https capture,那么fidder会提示你安装一个fiddler自己生成的根证书(fiddler自己作为CA)名为DO_NOT_TRUST_FIDDLER_ROOT的根证书。



之后当浏览器访问的每个https的域名(如www.baidu.com等):

fiddler会作为客户端先解开https内容

使用自己作为CA(名为DO_NOT_TRUST_FIDDLER_ROOT)的私钥,对baidu这个域名颁发一个用户证书。

https握手时向浏览器发送这个用户证书

浏览器收到fiddler作为server端返回的https回应时:



尝试解开server发来的用户证书,由于已经安装了fiddler的根证书,因此可以解开。

其中的域名是baidu.com,同浏览器访问的域名一致,因此证书这一部分就验证成功了。接下来的握手就自然可以完成。

那么,CA机构到底是什么呢?

CA,证书链,根证书

数字证书认证机构(CA)

它的出现就是为了防止中间人攻击的。

防止中间人攻击,说白了就是要确保B收到的A的公钥(证书)真实有效,这样数字证书认证机构应运而生。

数字证书认证机构说白了就相当于一个受信任的中间人。CA有一对根密钥,其公钥称为根证书。

A向CA申请一个证书,则CA利用其私钥加密A的公钥,其结果就是“服务器A,通过CA验证的证书”。

而在用户的操作系统(或者浏览器)中,会集成世界范围内所有被信任的CA的根证书。

这样,用户B在收到A发送给他的证书后,需要利用CA的根证书(公钥)解密后才能得到正确的公钥,如此一来,就完成了对A发送过来的信息的验证,证明了A的正身,不是C伪造的假证书,从而达成了中间人攻击的防范。


数字证书从何而来

对于根证书(ROOT CA)和中间证书(Intermediate CA)

在用户的操作系统(或者浏览器)中,会集成世界范围内所有被信任的CA的根证书。

安装软件时顺带安装,如支付宝安全控件等,此时软件会请求管理员权限(流氓…)。

用户自己下载安装,如12306网站

对于用户证书

比如www.alipay.com的证书,是支付宝公司通过如versign之类相关认证机构去资质审核以及缴费获得的。那么https访问中,server发来的数字证书长啥样呢?

支付宝www.alipay.com的证书

点击浏览器导航栏左上角的小锁












www.alipay.com证书路径中有三层,表示三级证书链。那么什么是证书链呢?

证书链

CA证书分为两类:

根证书(Root CA)

中间证书(Intermediate CA)。

但是根证书的使用是收到严格限制的,不可能对于每一类用户都使用根证书去签发子数字证书,所以就有了中间证书的概念。

中间证书由根证书或上一级中间证书签发,它可以再往下级签发数字证书。

例如我们自己为某个域名申请了证书 My CA,那么对于三级证书链,它的签发过程如下:

Root CA 签发 Intermediate CA, Intermediate CA 签发 My CA这时我们就可以用My CA去给域名作数字认证了。


上面讲到的签发关系很像链式结构,所以被称作证书链。

验证的过程可想而知,就是签发的逆过程,这是通过证书链来完成的:

- 浏览器会在计算机以及浏览器的证书列表中查找此CA是否可信, 如果有则认为My CA是可信的;
 - 如果没有,继续往上找,直到根证书:
 - 如果根证书是可信的,那么整条证书链就是可信的;
 - 如果根证书不可信,那么My CA将被认作是不可信的,浏览器就会发出警告。


所以说,对于刚才www.alipay.com的3级证书链来说:

根证书(ROOT CA)是Versign Class3 Public xxxx

中间证书(Intermediate CA)是 Symantec Class 3 Secure Server xxxx

如何查看已经安装的数字证书

对于windows平台:win+R, 输入certmgr.msc

对于Ubuntu: 放在/usr/share/ca-certificates/中

有风险的根证书



查看了自己电脑的证书,发现很多根证书都不知道从何而来的,(估计是其他插件捆绑安装来的)

整个HTTPS通信的唯一核心保障就是可信的根证书。这种自己安装不可信的根证书会有遭到中间人攻击的风险。

/*

* @author zhoushengtao(周圣韬)

* @since 2015年7月3日 11:04:22

* @weixin stchou_zst

* @blog http://blog.csdn.net/yzzst

* @交流学习QQ群:341989536

* @私人QQ:445914891

/

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: