面试网络安全Fiddler

03.HTTPS协议及用Fiddler查看HTTPS流量

2016-06-29  本文已影响1633人  OliverGao

本文部分内容参考果壳网对HTTPS的介绍,这里是原文链接:http://www.guokr.com/post/114121/

什么是HTTPS协议?

HTTPS(Secure Hypertext Transfer Protocol)安全超文本传输协议 它是一个安全通信通道,它基于HTTP开发,用于在客户计算机和服务器之间交换信息。它使用安全套接字层(SSL)进行信息交换,简单来说它是HTTP的安全版。

SSL是Netscape公司所提出的安全保密协议,在浏览器(如Internet Explorer、Netscape Navigator)和Web服务器(如Netscape的Netscape Enterprise Server、ColdFusion Server等等)之间构造安全通道来进行数据传输,SSL运行在TCP/IP层之上、应用层之下,为应用程序提供加密数据通道,它采用了RC4、MD5 以及RSA等加密算法,使用40 位的密钥,适用于商业信息的加密。同时,Netscape公司相应开发了HTTPS协议并内置于其浏览器中,HTTPS实际上就是SSL over HTTP,它使用默认端口443,而不是像HTTP那样使用端口80来和TCP/IP进行通信。HTTPS协议使用SSL在发送方把原始数据进行加密,然 后在接受方进行解密,加密和解密需要发送方和接受方通过交换共知的密钥来实现,因此,所传送的数据不容易被网络黑客截获和解密。

SSL目前的版本是3.0,被IETF(Internet Engineering Task Force)定义在RFC 6101中,之后IETF对SSL 3.0进行了升级,于是出现了TLS(Transport Layer Security) 1.0,定义在RFC2246。实际上我们现在的HTTPS都是用的TLS协议,但是由于SSL出现的时间比较早,并且依旧被现在浏览器所支持,因此SSL依然是HTTPS的代名词,但无论是TLS还是SSL都是上个世纪的事情,SSL最后一个版本是3.0,今后TLS将会继承SSL优良血统继续为我们进行加密服务。目前TLS的版本是1.2,定义在RFC5246中,暂时还没有被广泛的使用。

HTTPS的工作原理

HTTPS在传输数据之前需要客户端(浏览器)与服务端(网站)之间进行一次握手,在握手过程中将确立双方加密传输数据的密码信息。TLS/SSL中使用了非对称加密,对称加密以及HASH算法。关于非对称加密,对称加密涉及密码学相关知识,我们简单了解一下。

先看的是对称加密,所谓的对称加密,加密解密用的是同样的“钥匙。用邮局的例子来解释下对称加密,Alice 在盒子里放有信息,盒子上有挂锁,她有钥匙。通过邮局她把这个盒子寄给Bob。Bob收到盒子后,用相同的钥匙打开盒子(钥匙之前就得到了,可能是Alice面对面给他的)。然后Bob可以用同样的方法回复。


然后看非对称加密,非对称加密的加密解密用的是不同的“钥匙”。还是用Bob和Alice举例子:Bob和Alice各有自己的盒子。Alice要跟Bob秘密通信,她先让Bob把开着的盒子通过邮局发给她。Alice拿到盒子后放入信息锁上,然后发给Bob。Bob就可以用他自己的钥匙打开了。回复的话就用同样的方法。


HTTPS握手过程的简单描述如下:

SSL证书怎么来的?

SSL证书可以向CA机构通过付费的方式申请,也可以自己制作。CA机构颁发的证书价格非常昂贵,而且有效期一般只有一年到三年不等(年数不同,价格也不同),过期之后还要再次交钱申请,因此一般只有企业才会申请证书。但是随着个人网站的增多,目前也有针对个人的SSL证书服务,价格相对便宜一些,国内的话400多块钱就能申请到一个,国外更是有免费的SSL证书可以申请。

在申请SSL证书时需要向CA机构提供网站域名,营业执照,以及申请人的身份信息等。网站的域名非常重要,申请人必须证明自己对域名有所有权,如果支持Hotmail.com,Gmail.com的SSL证书都可以随便申请,黑客们就不用做假证书欺骗了。此外,一个证书一般只绑定一个域名,如果CA机构心情好的话,会免费再绑一个,比如你要申请域名时绑定的域名是guokr.com,那么只有在浏览器地址是https://guokr.com的时候,这个证书才是受信任的,如果地址是https://www.guokr.com或者https://login.guokr.com,那么这个证书由于访问的域名与证书绑定的域名不同,仍然会被浏览器显示为不受信任的。CA机构也提供申请通配符域名(例如,*.guokr.com),通配符域名相当于绑定了主域名下的所有域名,因此使用起来非常方便,但是价格也超级昂贵,一个通配符域名一年大概得5000块钱,只有企业才可以申请。下面就来看看一个证书的信息:


在访问hotmail的时候会跳转到login.live.com,这时IE浏览器上会有一个小锁头,点一下那个小锁头再点击里面的“查看证书”就会出现上图的证书窗口,这里面我们可以看到这个证书只有一个用途——向远程计算机证明身份信息,证书的用途会有很多,SSL只是其中之一。在“颁发给”这一项就是这个证书在申请时绑定的域名;下面的“颁发者”是证书的颁发机构。最下面的两个日期是证书申请时间以及过期的时间。这里我们可以注意一下“颁发者”的信息,里面有“Extended Validation SSL”的字样,表明了这个证书是一个EV SSL证书(扩展验证SSL证书),EV SSL证书有个特点就是可以让浏览器的地址栏变绿,同时显示出来证书所属公司的名称。EV SSL证书与其他的证书相比,费用更高。

以上说的是向CA机构申请证书的情况,如果个人网站只为加密传输也可以自己制作SSL证书,自己制作的证书不会受到浏览器的信任,在访问的时候由于证书验证失败而给出警告。

证书以证书链的形式组织,在颁发证书的时候首先要有根CA机构颁发的根证书,再由根CA机构颁发一个中级CA机构的证书,最后由中级CA机构颁发具体的SSL证书。我们可以这样理解,根CA机构就是一个公司,根证书就是他的身份凭证,每个公司由不同的部门来颁发不同用途的证书,这些不同的部门就是中级CA机构,这些中级CA机构使用中级证书作为自己的身份凭证,其中有一个部门是专门颁发SSL证书,当把根证书,中级证书,以及最后申请的SSL证书连在一起就形成了证书链,也称为证书路径。在验证证书的时候,浏览器会调用系统的证书管理器接口对证书路径中的所有证书一级一级的进行验证,只有路径中所有的证书都是受信的,整个验证的结果才是受信。我们还是以login.live.com这个证书举例,在查看证书的时候,点击“证书路径”标签就会有下图的显示:


根证书是最关键的一个证书,如果根证书不受信任,它下面颁发的所有证书都不受信任。操作系统在安装过程中会默认安装一些受信任的CA机构的根证书,可以在“运行”里面运行“certmgr.msc”启动证书管理器查看相关证书。

SSL证书验证失败有以下三点原因:

所以在访问HTTPS网站时需要注意如下的问题:

Fiddler抓HTTPS包的相关设置

介绍了这么多的HTTPS/SSL协议相关的内容之后我们要回到我们的正题Fiddler工具上了,今天的主题是使用Fiddler查看HTTPS流量,那么为什么要查看HTTPS流量呢?这个问题和为什么要使用Fiddler工具其实是一致的,我们使用Fiddler工具是为了查看、调试网络流量,但是如果不做设置,我们的Fiddler是无法查看到HTTPS包的相关内容的。为了安全方面的考虑,许多的应用在传递敏感信息的时候会选用HTTPS协议来传输已确保数据的安全性(杀毒软件和手机防护软件也会检查应用在传递敏感信息是是否使用了加密手段作为对该软件安全评级的一个因素),当我们需要查看这些流量时就必须要开启Fiddler的HTTPS debug功能了。

在Fiddler菜单中选择Toos->Fiddler Options,打开HTTPS TAB:


至此我们已经完成了Fiddler查看HTTPS报文的操作,是不是很简单呢?那么为什么Fiddler能够查看到HTTPS报文内部的内容呢?知乎上有一篇答案回复的比较详细,我们一起来看一下,原文链接,答主:连山归藏

首先fiddler截获客户端浏览器发送给服务器的https请求, 此时还未建立握手。
第一步, fiddler向服务器发送请求进行握手, 获取到服务器的CA证书, 用根证书公钥进行解密, 验证服务器数据签名, 获取到服务器CA证书公钥。
第二步, fiddler伪造自己的CA证书, 冒充服务器证书传递给客户端浏览器, 客户端浏览器做跟fiddler一样的事。
第三步, 客户端浏览器生成https通信用的对称密钥, 用fiddler伪造的证书公钥加密后传递给服务器, 被fiddler截获。
第四步, fiddler将截获的密文用自己伪造证书的私钥解开, 获得https通信用的对称密钥。
第五步, fiddler将对称密钥用服务器证书公钥加密传递给服务器, 服务器用私钥解开后建立信任, 握手完成, 用对称密钥加密消息, 开始通信。
第六步, fiddler接收到服务器发送的密文, 用对称密钥解开, 获得服务器发送的明文。再次加密, 发送给客户端浏览器。
第七步, 客户端向服务器发送消息, 用对称密钥加密, 被fidller截获后, 解密获得明文。由于fiddler一直拥有通信用对称密钥, 所以在整个https通信过程中信息对其透明。

简单总结一下就是Fiddler用自己的被用户信任过的根证书与客户端通信,假装自己是服务器,获取到客户端向服务器传递的信息,同时以客户端的姿态以真实的证书向服务器请求数据,再把收到的数据已Fiddler证书加密后传回给客户端,其间所有的数据都是对Fiddler可见的,所以就就能够解析出内容啦。

Android手机抓HTTPS包操作指南

Fiddler要能够查看手机的HTTPS包根据我们前面对Fiddler抓HTTPS包原理的分析,我们需要在手机上安装Fiddler证书即可,在安装Fiddler后,我们的Fiddler会自动在PC机的相应端口(即上一讲中在选项中设置的端口,默认8888)上建立一个网站,访问
http://<PC机IP>:<Fiddler端口号>
可以打开一个网页,这个网页中最下面提供了链接就是Fiddler的证书下载,使用Android任意浏览器访问这个页面,点“FiddlerRoot certificate”:


然后弹出证书安装菜单,随意填写名字:

Android系统为了安全性考虑,安装自定义证书后需要启用锁屏密码,设置一个即可

iPhone手机抓HTTPS包操作指南

IOS操作与Android类似,使用Safari访问地址下载证书:



然后点击安装即可:


HTTPS丢包了怎么办?

使用Fiddler抓HTTPS可能会遇到HTTPS丢包的情况,通常可以通过如下几个方法解决:

上一篇 下一篇

猜你喜欢

热点阅读