HTTPS协议及用Fiddler查看HTTPS流量

1.什么是HTTPS协议?

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

HTTPS实际上就是SSL over HTTP,它使用默认端口443,而不是像HTTP那样使用端口80来和TCP/IP进行通信。HTTPS协议使用SSL在发送方把原始数据进行加密,然 后在接受方进行解密,加密和解密需要发送方和接受方通过交换共知的密钥来实现,因此,所传送的数据不容易被网络黑客截获和解密。

2.HTTPS的工作原理

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

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


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


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

  • 浏览器将自己支持的一套加密规则发送给网站。
  • 网站从中选出一组加密算法与HASH算法,并将自己的身份信息以证书的形式发回给浏览器。证书里面包含了网站地址,加密公钥,以及证书的颁发机构等信息。
  • 获得网站证书之后浏览器要做以下工作:
    • 验证证书的合法性(颁发证书的机构是否合法,证书中包含的网站地址是否与正在访问的地址一致等),如果证书受信任,则浏览器栏里面会显示一个小锁头,否则会给出证书不受信的提示。
    • 如果证书受信任,或者是用户接受了不受信的证书,浏览器会生成一串随机数的密码,并用证书中提供的公钥加密。
    • 使用约定好的HASH计算握手消息,并使用生成的随机数对消息进行加密,最后将之前生成的所有信息发送给网站。
  • 网站接收浏览器发来的数据之后要做以下的操作:
    • 使用自己的私钥将信息解密取出密码,使用密码解密浏览器发来的握手消息,并验证HASH是否与浏览器发来的一致。
    • 使用密码加密一段握手消息,发送给浏览器。
  • 浏览器解密并计算握手消息的HASH,如果与服务端发来的HASH一致,此时握手过程结束,之后所有的通信数据将由之前浏览器生成的随机密码并利用对称加密算法进行加密。

3.SSL证书的样子

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


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

4.Fiddler抓HTTPS包的相关设置

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

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


  • 勾选Capture HTTPS CONNECTS,会抓取CONNECT请求,CONNECT请求是HTTP协议中的请求方法中的一种(还有GET,POST,HEADER,PUSH等方法),其作用是建立一个直接通往目标服务器的TCP通道用于数据的传输,大多数http proxy支持CONNECT命令,但一般只支持CONNECT到外部服务器的443(https)端口。这是为了允许访问外部的https服务。porxy对于CONNECT的连接是直接转发,不做任何分析处理或缓存。客户端访问HTTPS请求会先向服务器发送一个CONNECT请求,建立与服务器通信的通道,后续的HTTPS内容的传输也会在这个通道内传输,开启这个选项我们便能看到CONNECT请求了,在Fiddler中,它通常是这样的:

  • 然后勾选Decrypt HTTPS traffic选项,这时就开启的了Fiddler抓取HTTPS包的功能,同时会自动安装Fiddler根证书,根证书的作用我们上面已经详述了,Fiddler具体怎么样破解HTTPS流量的我们稍后详谈,我们先把这选项看完,点击后会弹出对话框让用户确认,点击Yes:


    然后Windows会询问用户是否信任安装的证书,选择是:


    此时PC上的Fiddler证书已经安装完成,可以查看HTTPS流量了。
  • Ignore server certificate errors选项可选可不选,作用是如果勾选了在服务器证书真的是不可靠的时候会报错提醒,如果是debug自己的产品在ssl证书是自己构造的时候是可以勾上这个选项避免告警的

至此我们已经完成了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可见的,所以就就能够解析出内容啦。

5.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访问地址下载证书:



然后点击安装即可:


6.HTTPS丢包了怎么办?

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

  • 查看手机代理是否设置正确
  • 关闭PC机防火墙
  • 重新安装手机证书(最好删除掉所有证书后安装)
  • 重装FiddlerPC端证书(在Fiddler Options中的HTTPS Tab中,去勾选Capture HTTPS CONNECTs,然后点击Remove Interception Certificates,重启Fiddler再按照启用HTTPS抓包的顺序操作一次即可)
  • 重装Fiddler(删除Program Files及我的文档下的Fiddler2文件夹,重装Fiddler,可能是Fiddler有Bug在以上办法都不行时可以试试这个操作,记得备份自己的HOSTS,及自定义脚本插件等文件)

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值