聊聊HTTPS与Android安全(二)

“互联网仍然处于开端的开端阶段(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的域名(如等):

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)

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

支付宝的证书 点击浏览器导航栏左上角的小锁

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

证书链

CA证书分为两类:

根证书(Root CA) 中间证书(Intermediate CA)。

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

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

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

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

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

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

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

所以说,对于刚才的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 * @交流学习QQ群:341989536 * @私人QQ:445914891 /

后来逐渐有广州花城的,

聊聊HTTPS与Android安全(二)

相关文章:

你感兴趣的文章:

标签云: