使用Fiddler抓包调试https下的页面
众所周知https技术诞生以来,一个很重要的作用就是加密通信内容。所以在项目团队将业务站点实施完https改造以后,原先使用fiddler进行抓包的美好生活到头了。其实fiddler本身是支持对于https请求的抓包的,同时还能在开发环境不支持https的情况下,将https请求转发到http请求上。 下面让我带大家一起走进科学,只需要对fiddler加点一丢丢特技,让它能够在https的环境下duang起来。 
一、启用Fiddler的https捕获功能
打开Fiddler,依次选择Tools->Fiddler Options->HTTPS,勾选“Capture HTTPS CONNECTs”和“Decrypt HTTPS traffic”。
点击“OK”以后Fiddler会弹出一个对话框问你是否要让Windows信任Fiddler生成的自签证书,选择“Yes”以后,还会弹出一些对话框,直接“Yes”或“Ok”即可。
将PC浏览器的代理设置为127.0.0.1:8888(Fiddler默认代理)以后,随便访问一个https网站就可以在Fiddler中看到对应的请求,和正常访问http几乎相同。
Reference:Fiddler这里其实是利用类似中间人欺骗的方法,让系统信任Fiddler生成的自签证书,之后所有通过Fiddler的https请求均会被Fiddler“篡改”重新使用Fiddler生成的证书加密,以达到监听https的目的。
二、在手机上安装Fiddler证书(以iOS为例)
在iOS中使用全民Wi-Fi或类似技术连接上Fiddler,并设置代理服务器。然后打开浏览器,输入网关IP(即设置的代理服务器IP,PC的IP地址)+:8888。例如我的手机在连接上全民Wi-Fi以后,分配到的网关IP是127.16.0.1,那么直接在Safari中输入 http://127.16.0.1:8888 ,浏览器会打开如下的页面:
点击页面最下方的FiddlerRoot certificate,iOS会打开安装证书页面:
点击右上角Install,iOS会让你输入手机的PIN密码。这时iOS可能会弹出一个Warning/警告信息,提醒你正在添加的证书无法验证。忽略之,继续点上角的Install即可安装完成。完成安装证书以后,就可以在iOS上直接访问https地址,所有的请求对于Fiddler来说也都是透明的了。 如果需要删除之前添加的证书,只需要在iOS上打开“Settings”->“General”->"Profile",当中列出了用户手机上已经安装的证书,选择“DO_NOT_TRUST_FiddlerRoot”删除之即可。
三、瞒天过海让nodejs直接支持https
nodejs一种比较主流的架构是在服务器上直接运行一个非80/443端口的服务,再使用nginx反向代理对外提供服务。用这种方法nodejs层面完全不需要考虑https及相关的技术问题,所有的https请求均由nginx去处理。在这种情况下,我们的开发环境一般不会额外安装nginx去处理https请求,那么我们需要如何让nodejs支持https请求呢?
我们知道https通信在开始时会发送一个METHOD为CONNECT的请求,让服务器将证书以及相关的信息返回给浏览器,在没有得到这些信息之前,浏览器是不会信任服务器发来的任何数据的。So现在我们要让Fiddler帮我一起骗过浏览器,让他心甘情愿把数据交出来。
打开Fiddler,在右侧的选项卡中找到FiddlerScript页签(没有找到FiddlerScript页签的同学请移步 http://www.telerik.com/download/fiddler/fiddlerscript-editor 下载安装即可),从Go To后的下拉列表中选择“OnBeforeRequest”。在这里我们可以看到很多很多的。。。。。代码,然后都不用管它,直接拉到OnBeforeRequest方法的结尾。
FiddlerScript使用的语言JScript.Net是一个以JavaScript为基础,长得有点像C#,Editor和VB很像的一个杂交体,本质上来说和JavaScript差别不大,有兴趣的同学可以参考 《Fiddler (二) Script 用法》 这篇文章。
在OnBeforeRequest方法的结尾加入如下代码:
static function OnBeforeRequest(oSession: Session){
var hosts = 'zkd.me develop.dog';
FiddlerApplication.Log.LogFormat("Logger session {0}, Url: {1}, isHttps: {2}, port: {3}", oSession.id, oSession.fullUrl, oSession.isHTTPS, oSession.port);
if(hosts.indexOf(oSession.host) > -1){
FiddlerApplication.Log.LogFormat("Capture session {0}, Url: {1}, isHttps: {2}, port: {3}", oSession.id, oSession.fullUrl, oSession.isHTTPS, oSession.port);
if(oSession.HTTPMethodIs('CONNECT')){
FiddlerApplication.Log.LogString('create fake tunnel response');
oSession['x-replywithtunnel'] = 'FakeTunnel';
return;
}
if (oSession.isHTTPS){
FiddlerApplication.Log.LogString('switch https to http request');
oSession.fullUrl = oSession.fullUrl.Replace("https://","http://");
oSession.port = 80;
}
FiddlerApplication.Log.LogFormat("Processed session {0}, Url: {1}, isHttps: {2}, port: {3}", oSession.id, oSession.fullUrl, oSession.isHTTPS, oSession.port);
}
FiddlerApplication.Log.LogFormat("Logger session {0}, Url: {1}, isHttps: {2}, port: {3}", oSession.id, oSession.fullUrl, oSession.isHTTPS, oSession.port);
}
hosts变量定义的域名就是我们想让Fiddler帮我们一起欺骗浏览器的域名。点击FiddlerScript界面左上角的“Save Script”,伴随着一声“滴咚”,配置就生效了。
这段代码的作用是判断如果这些指定的域名上有从浏览器传来CONNECT的请求时,直接返回一个假的Response,这时Fiddler不会再试图去让请求的实际响应者回应这个CONNECT请求,而是自己返回了一个请求。浏览器在收到这个请求以后不明就里,认为是服务器已经返回了安全信息,于是便愉快地继续发送请求。Fiddler在收到之后的请求,会将URL中的https替换为http,端口强制更换为80,再发给请求的实际响应者。 下图可以比较容易看出Fiddler在这一过程中扮演的角色。
总之,只要通过上述不太复杂这一系列的特技,就可以让Fiddler帮助我们在https环境下方便地进行debug,大家学会了吗?
使用Fiddler抓包调试https下的页面的更多相关文章
- fiddler抓包工具 https抓取 ios手机端抓取
fiddler抓包工具 https抓取 ios手机端抓取 转载链接:https://www.cnblogs.com/bais/p/9118297.html 抓取pc端https请求,ios手机端 ...
- Fiddler抓包调试前端脚本代码
0.写在前面的话 之前看了阮一峰老师关于互联网协议入门的博客,受益匪浅,接着再去体会了下HTTP协议,就想着看实际网络访问中的那些HTTP请求头和响应是什么样的.Chrome的调试工具的Network ...
- Java代码里利用Fiddler抓包调试设置
Fiddler启动时已经将自己注册为系统的默认代理服务器,应用程序在访问网络时会去获取系统的默认代理,如果需要捕获java访问网络时的数据,只需要在启动java程序时设置代理服务器为Fiddler即可 ...
- Fiddler抓包学习——https请求的抓取
第一步:设置Fiddler windows下安装证书 打开fiddler 查看证书是否安装 说明已安装成功 设置端口号(下面手机设置代理所需要的) 第二部 手机端安装证书 通过fiddler查看电 ...
- Mac 下安装Fiddler抓包工具
需求 我们都知道在Mac电脑下面有一个非常好的抓包工具:Charles.但是这个只能抓代理的数据包.但是有时候想要调试本地网卡的数据库 Charles 就没办法了.就想到了在windows下面的一个F ...
- Fiddler抓取https请求 & Fiddler抓包工具常用功能详解
Fiddler抓取https请求 & Fiddler抓包工具常用功能详解 先来看一个小故事: 小T在测试APP时,打开某个页面展示异常,于是就跑到客户端开发小A那里说:“你这个页面做的有问 ...
- MAC下安装Fiddler抓包工具
需求 我们都知道在Mac电脑下面有一个非常好的抓包工具:Charles.但是这个只能抓代理的数据包.但是有时候想要调试本地网卡的数据库 Charles 就没办法了.就想到了在windows下面的一个F ...
- 谈iOS抓包:Mac下好用的HTTP/HTTPS抓包工具Charles
在Mac下做开发,用Fiddler抓包由于离不开Windows比较痛苦,还好有Charles,到官网http://www.charlesproxy.com/可下载到最新版本(若不支持rMBP可拖到Re ...
- 前段时间碰到的一些问题(免费WiFi设置+fiddler对手机进行抓包+fiddler抓不到https的请求)
这段时间转入移动端测试,对这块比较陌生,工作开展起来比较困难,所以好多东西都只是以解决问题为第一目标,没有去细细推敲其中原理,可能会有些语无伦次之感,但还是记一下当时解决问题的大致思路,供以后参考. ...
随机推荐
- Digital Adjustment of DC-DC Converter Output Voltage in Portable Applications
http://pdfserv.maximintegrated.com/en/an/AN818.pdf http://www.maximintegrated.com/app-notes/index.mv ...
- MVC为用户创建专属文件夹
假设需要为用户创建专属文件夹,文件夹名为用户名,并且需要根据用户类型在不同的文件夹下创建目标文件夹. 在F盘创建"Users"文件夹,在其中创建"Gold"文件 ...
- ubuntu 添加CDROM安装源
国内私募机构九鼎控股打造APP,来就送 20元现金领取地址:http://jdb.jiudingcapital.com/phone.html内部邀请码:C8E245J (不写邀请码,没有现金送)国内私 ...
- 防火墙 0x80070422
1.无法打开操作中心-安全服务,解决方法:控制面板->管理工具->服务,找到Security Center 服务,双击打开,查看启动类型是否设置成禁用,是的话更改成自动或者延迟启动,之后就 ...
- TPL中限制进程数量
The MaxDegreeOfParallelism sets the maximum number of simultaneous threads that will be used for the ...
- Selenium2+python自动化33-文件上传(send_keys)
前言 文件上传是web页面上很常见的一个功能,自动化成功中操作起来却不是那么简单. 一般分两个场景:一种是input标签,这种可以用selenium提供的send_keys()方法轻松解决: 另外一种 ...
- linux统计文件夹内文件数
for dir in `find ./ -type d ` ;do echo -n "$dir " ;find $dir -type f | wc -l ;echo " ...
- RuntimeError: Working outside of application context.
flask执行错误: 问题:RuntimeError: Working outside of application context. 方法: from flask import Flask, cur ...
- how to configure logback for Mybatis to print my SQL
To log SQL statements for particular mybatis mapper set DEBUG (TRACE to see query parameters and res ...
- Java:IO流的综合用法(从键盘录入数据并打印在控制台上)
import java.io.*; public class IOTestDouble { public static void main(String[] args)throws Exception ...