Fiddler 抓取https请求

  引言

  在平常测试中,不论是功能测试仍是接口测试,避免不了抓包。抓包工具备不少,这里只讲fiddler的使用,而且是对https请求的抓取。android

  概况

  抓包以前,先了解一下Fiddler。浏览器

  Fiddler是一款免费且功能强大的数据包抓取软件。它经过代理的方式获取程序http通信的数据,能够用其检测网页和服务器的交互状况,可以记录全部客户端和服务器间的http请求,支持监视、设置断点、甚至修改输入输出数据等功能。fiddler包含了一个强大的基于事件脚本的子系统,而且可以使用.net框架语言扩展。安全

  基本原理

  Fiddler是位于客户端和服务器端之间的HTTP代理, 它可以记录客户端和服务器之间的全部 HTTP(S)请求,能够针对特定的HTTP(S)请求,分析网络传输的数据,还能够设置断点、修改请求的数据和服务器返回的数据。
Fiddler在浏览器与服务器之间创建一个代理服务器,Fiddler工做于七层中的应用层,可以捕获经过的HTTP(S)请求。Fiddler启动后会自动将代理服务器设置成本机,默认端口为8888。Fiddler不只能记录PC上浏览器的网络请求数据,还能够记录同一网络中的其余设备的HTTP(S)请求数据。数据传递流程大体以下:服务器

  

 

  1) 客户端像WEB服务器发送HTTP(S)请求时,请求会先通过代理Fiddler代理服务器。
  2) Fiddler代理服务器截取客户端的请求报文,再转发到WEB服务器,转发以前能够作一些请求报文参数修改的操做。
  3) WEB服务器处理完请求之后返回响应报文,Fiddler代理服务器会截取WEB服务器的响应报文。
  4) Fiddler处理完响应报文后再返回给客户端。网络

  简单来讲就是:app

  客户端请求 -> 通过代理 -> 到达服务端
  服务端返回 -> 通过代理 -> 到达客户端框架

  抓HTTPS的原理

  如今APP中的数据传输基本上都使用HTTS传输,传输的数据都是通过加密的,这增长了咱们分析数据包的难度,还好Fiddler除了能够抓取HTTP数据包,还能够抓取HTTPS数据包。因为HTTPS传输须要使用到CA证书,因此抓取抓取HTTPS数据包时须要作一些特殊配置。Fiddler截取HTTPS报文的流程大体以下:工具

  

  1) 客户端请求创建HTTPS连接,发送客户端支持的加密协议及版本列表等信息给服务器端。
  2) Fiddler接受客户端请求并假装成客户端向WEB服务器发送相同的请求。
  3) WEB服务器收到Fiddler的请求之后,从请求中筛选合适的加密协议。并返回服务器CA证书,证书中包括公钥信息。
  4) Fiddler收到WEB服务器的响应后保存服务器证书并自签名一个CA证书,假装成服务器,把该证书下发给客户端。
  5) 客户端验证证书合法性。(Fiddler可否抓取到HTTPS报文关键看这一步)
  6) 客户端生产对称密钥,经过证书的公钥加密发送给服务器。
  7) Fiddler拦截客户端的请求之后,使用私钥解密该报文,获取对称加密秘钥,并使用服务器证书中带的公钥加密该对称密钥发送给WEB服务器。此时对称密钥已经泄露了,之后可使用该秘钥界面客户端和服务器端传输的数据。
  8) WEB服务器接收到客户端发送的加密的对称密钥后使用私钥解密,并使用对称密钥加密测试数据传给客户端。
  9) Fiddler使用前面获取的对称密钥解密报文。
  10) 客户端验证数据无误之后HTTPS链接就创建完成,客户端开始向服务器发送使用对称密钥加密的业务数据
  11) Fiddler使用前面获取的对称密钥解密客户端发送的数据并从新加密转发给客户端。性能

  HTTPS请求两类

  1.带证书的https请求:请求中携带证书,只要证书正确就能请求过去,没有其它要求。学习

  2.不带证书的https请求:只要是CA颁布的正规证书(收费的),均可以不用携带证书,达到https的加密效果,大大减轻了请求的代码量,可是这种请求必需要求请求方合法(时间要正确,好比把手机时间调成几天前,证书就会认为请求非法,拒绝访问)

  Fiddler抓包要求

  从上面能够看到,fiddler至关于代理,客户端和服务器交互都要经过fiddler,Fiddler抓取HTTPS协议成功的关键是根证书(根证书是CA认证中心给本身颁发的证书,是信任链的起始点。安装根证书意味着对这个CA认证中心的信任。),这是一个信任链的起点,这也是Fiddler伪造的CA证书可以得到客户端和服务器端信任的关键。

  手机或模拟器抓包https请求的话,须要在手机上安装fiddler证书。

  安装步骤这里不复述了。

  问题1:须要注意的是,不是任何Https请求包均可以抓到的。

  Android7.0如下是能够的,只要手机里安装对应的CA证书,好比用Charles抓包,手机只需安装Charles提供的证书就行;Android7.0以后,Google推出更加严格的安全机制,应用默认不信任用户证书(手机里本身安装的证书),本身的app能够经过配置解决,可是抓其它app的Https请求就行不通。

  首先看一下安卓7.0以上的系统,抓包以下:

  

    

  

 

   若是是安装7.0如下的版本,这里拿安卓4.0来演示,如图:

   

 

   

  结论是android7.0如下版本,在模拟器下抓包https是没有问题的。固然手机一样的版本也会支持。而高于7.0的安卓系统则抓不了https请求。

  注意这里的https请求是没有携带CA证书到请求中去的。

  问题2:若是不能,那些状况下能够抓取,那些状况下抓取不到?

  虽然Android7.0以后常规手段不能抓Https的包,可是能够经过黑科技跳过证书验证流程,例如,经过xposed,安装JustTrustMe模块,Https证书验证直接跳过。这个没有试过,可自行测试。

   问题3:如何防止被抓包?

 

  1. Https双向验证,不是客户端的请求,拒接连接(这里服务端拒绝和客户端创建链接)
  2. 判断是不是使用WIFI代理(不可靠,能够经过hook跳过)
  3. 数据加密传输(不少app都是采用加密传输,要注意密钥的安全问题,防止被反编译泄露密钥)

 

  总结

  以上就是手机或模拟器抓取https请求包的介绍。一些简单安装或抓取步骤就没在这里一一讲解。 另外对自动化测试,测试开发及性能测试相关的朋友能够加入交流群,学习与沟通~

相关文章
相关标签/搜索