Fiddler抓取https设置及其原理
iddler抓取https设置及其原理
2018-02-02
目录
1 HTTPS握手过程
2 Fiddler抓取HTTPS过程
3 Fiddler抓取HTTPS设置
参考
1 HTTPS握手过程
HTTPS 并非是应用层的一种新协议。只是 HTTP 通信接口部分用 SSL (安全套接字层)和TLS (安全传输层协议)代替而已。即添加了加密及认证机制的 HTTP 称为 HTTPS ( HTTP Secure )。
HTTPS = HTTP + 认证 + 加密 + 完整性保护
握手过程如下:
第一步:客户端发起明文请求:将自己支持的一套加密规则、以及一个随机数(Random_C)发送给服务器
第二步:服务器选出一组加密规则和hash算法,并将自己的身份信息以证书(CA:包含网站地址、加密公钥、证书颁发机构等信息)和一个随机数(Random_S)发给客户端
第三步:客户端接到服务器的响应
验证证书的合法性(颁发证书的机构是否合法,证书中包含的网站地址是否与正在访问的地址一致等)。如果证书受信任,则浏览器栏里面会显示一个小锁头,否则会给出证书不受信的提示。
如果证书受信任,或者是用户接受了不受信的证书,客户端做以下事情:
- 生成密码:浏览器会生成一串随机数的密码(Pre_master),并用CA证书里的公钥加密(enc_pre_master),用于传给服务器。
- 计算协商密钥:enc_key=Fuc(random_C, random_S, Pre-Master)
- 生成握手信息:使用约定好的HASH计算握手消息,并使用协商密钥enc_key及约定好的算法对消息进行加密。
- 发送以下信息到服务器:
- 用公钥加密过的服务器随机数密码enc_pre_master
- 客户端发给服务器的通知,"以后我们都要用约定好的算法和协商密钥进行通信的哦"。
- 客户端加密生成的握手信息。
第四步,服务器接收客户端发来的数据要做以下四件事情:
- 私钥解密:使用自己的私钥从接收到的enc_pre_master中解密取出密码Pre_master。
- 计算协商密钥:enc_key=Fuc(random_C, random_S, Pre-Master)
- 解密握手消息:使用协商密钥enc_key解密客户端发来的握手消息,并验证HASH是否与客户端发来的一致。
- 生成握手消息使用协商密钥enc_key及约定好的算法加密一段握手消息,发送给客户端。这里要发的数据有两条:
- 服务器发给客户端的通知,”听你的,以后我们就用约定好的算法和协商密钥进行通信哦“。
- 服务器加密生成的握手信息。
第五步,客户端拿到握手信息解密,握手结束。
客户端解密并计算握手消息的HASH,如果与服务端发来的HASH一致,此时握手过程结束。
第六步,正常加密通信
握手成功之后,所有的通信数据将由之前协商密钥enc_key及约定好的算法进行加密解密。
这里浏览器与网站互相发送加密的握手消息并验证,目的是为了保证双方都获得了一致的密码和hash算法,并且可以正常的加密解密数据,为后续真正数据的传输做一次测试。
从握手过程,我们可以得知:
- 通过CA可以确认网站的合法性
- 通过enc_key来加密解密,在传输过程中,为了保证enc_key不被解破,在客户端用公钥加密后,在服务器端用私钥解密,私钥只有服务器端有,所以即使报文被截获,也无法破解。
- hash算法确保报文的完整性
hash算法确保
2 Fiddler抓取HTTPS过程
我们都知道,Fiddler是个很好的代理工具,可抓取协议请求用于调试。
Fiddler抓取HTTPS协议主要由以下几步进行:
第一步,Fiddler截获客户端发送给服务器的HTTPS请求,Fiddler伪装成客户端向服务器发送请求进行握手 。
第二步,服务器发回相应,Fiddler获取到服务器的CA证书, 用根证书(这里的根证书是CA认证中心给自己颁发的证书)公钥进行解密, 验证服务器数据签名, 获取到服务器CA证书公钥。然后Fiddler伪造自己的CA证书(这里的CA证书,也是根证书,只不过是Fiddler伪造的根证书), 冒充服务器证书传递给客户端浏览器。
第三步,与普通过程中客户端的操作相同,客户端根据返回的数据进行证书校验、生成密码Pre_master、用Fiddler伪造的证书公钥加密,并生成HTTPS通信用的对称密钥enc_key。
第四步,客户端将重要信息传递给服务器, 又被Fiddler截获。Fiddler将截获的密文用自己伪造证书的私钥解开, 获得并计算得到HTTPS通信用的对称密钥enc_key。Fiddler将对称密钥用服务器证书公钥加密传递给服务器。
第五步,与普通过程中服务器端的操作相同,服务器用私钥解开后建立信任,然后再发送加密的握手消息给客户端。
第六步,Fiddler截获服务器发送的密文, 用对称密钥解开, 再用自己伪造证书的私钥加密传给客户端。
第七步,客户端拿到加密信息后,用公钥解开,验证HASH。握手过程正式完成,客户端与服务器端就这样建立了”信任“。
在之后的正常加密通信过程中,Fiddler如何在服务器与客户端之间充当第三者呢?
服务器—>客户端:Fiddler接收到服务器发送的密文, 用对称密钥解开, 获得服务器发送的明文。再次加密, 发送给客户端。
客户端—>服务端:客户端用对称密钥加密,被Fiddler截获后,解密获得明文。再次加密,发送给服务器端。由于Fiddler一直拥有通信用对称密钥enc_key, 所以在整个HTTPS通信过程中信息对其透明。
3 Fiddler抓取HTTPS设置
从上面可以看到,Fiddler抓取HTTPS协议成功的关键是根证书(根证书是CA认证中心给自己颁发的证书,是信任链的起始点。安装根证书意味着对这个CA认证中心的信任。),这是一个信任链的起点,这也是Fiddler伪造的CA证书能够获得客户端和服务器端信任的关键。
没有受信任的fiddler根证书,既不能解密得到公钥,也不能让客户端相信fiddler伪造的CA证书,从而得到Pre_master。
接下来我们就来看如果设置让Fiddler抓取HTTPS协议。
Fiddler菜单->Tools->Telerik Fiddler Options
在跳出的对话框点击‘Yes’
在跳出的对话框点击‘是(Y)’后,通过IE的Internet选项,我们可以看到Fiddler的根证书被加入到“受信任的根证书颁发机构”。
参考
[2] HTTPS的工作原理
Fiddler抓取https设置及其原理的更多相关文章
- HTTPS-使用Fiddler抓取HTTPS数据包原理
最近想尝试基于Fiddler的录制功能做一些接口的获取和处理工作,碰到的一个问题就是简单连接Fiddler只能抓取HTTP协议,关键的登录请求等HTTPS协议都没有捕捉到,所以想让Fiddler能够同 ...
- fiddler软件测试——Fiddler抓取https设置详解(图文)(摘抄)
随笔- 8 文章- 0 评论- 0 fiddler软件测试——Fiddler抓取https设置详解(图文) 强烈推荐(原创亲测)!!!Fiddler抓取https设置详解(图文)转 本文主要说 ...
- fiddler软件测试——Fiddler抓取https设置详解(图文)
强烈推荐(原创亲测)!!!Fiddler抓取https设置详解(图文)转 本文主要说明了自己在设置fiddler抓取https过程中所遇到的问题及解决步骤,特别是fiddler在设置证书的环节遇到的各 ...
- 爬虫之Fiddler抓取HTTPS设置
Fiddler抓取HTTPS设置 启动Fiddler,打开菜单栏中的 Tools > Telerik Fiddler Options,打开“Fiddler Options”对话框. 对Fiddl ...
- Fiddler抓取https设置详解
很多使用fiddler抓包,对于http来说不需太多纠结,随便设置下就能用,但是抓取https就死活抓不了, 出现诸如以下问题: creation of the root certificate wa ...
- 强烈推荐!!!Fiddler抓取https设置详解(图文)
很多实用fiddler抓包,对于http来说不需太多纠结,随便设置下就能用,但是抓取https就死活抓不了, 诸如以下问题: creation of the root certificate was ...
- Fiddler抓取https设置详解(图文)
本文主要说明了自己在设置fiddler抓取https过程中所遇到的问题及解决步骤,特别是fiddler在设置证书的环节遇到的各种奇葩问题,特此分享! 声明:本文为原创文章,转载请注明来源:https: ...
- Fiddler抓取HTTPS设置
做App测试,用Fiddler进行抓包,以下操作记录如何用手机进行设置使其可以捕捉HTTPS协议. 一.电脑端设置 1.手机和电脑保持统一局域网内 2.配置fiddler允许监听到https 打开Fi ...
- fiddler 4 抓取 https 设置
Fiddler抓取https 设置 1.打开fiddler,点击工具栏中的Tools—>Options,点击Actions,选择最后一项,Reset All certificates,然后关闭, ...
随机推荐
- EmguCv“线段” 结构类型学习
1. 文件所在 Namespace: Emgu.CV.Structure Assembly: Emgu.CV (in Emgu.CV.dll) Version: 3.0.0.2157 (3.0.0.2 ...
- IntentService源码
原文地址IntentService源码分析 @Override public void onCreate() { super.onCreate(); HandlerThread thread = ne ...
- nyoj234 吃土豆 01背包
思路:假设我们先只考虑一行,规则就是取了i处的土豆,每一个土豆有两种选择,拿与不拿,那么i-1和i+1处的土豆都不能再取,那么要求某一行的最大取值就用一次动态规划即可,dp(i)表示前i个土豆能取得的 ...
- SRE之道:创造软件系统来维护系统运行
引言:本文作者Ben Treynor Sloss,Google 运维团队的高级副总裁,SRE 名称的发明者,在这里提供了他对SRE 的定义. 本文选自<SRE:Google运维解密>. ...
- 在DirectShow的视频图像上叠加线条和文字
在DirectShow的视频图像上叠加线条和文字 最近一直在从事工业测量方面的开发工作,难免会用到各种各样的相机,其中支持DX的USB相机开发起来比较方便,由于工作需要经常要在视频图像上叠加线条和文字 ...
- 问题解决了,可是为什么呢?could not find the main class.program will exitmain
今天重新学习socket编写简单的在线聊天,简单功能实现的情况下,一时心血来潮便想要把这程序打成可执行的jar包,以便于在桌面直接双击运行. 参照自己之前写的那篇<>打好两个jar包以后却 ...
- STM32F4 输入输出(GPIO)模式理解
stm32的GPIO的配置模式有好几种,包括: 1. 模拟输入: 2. 浮空输入: 3. 上拉输入: 4. 下拉输入: 5. 开漏输出: 6. 推挽输出: 7. 复用开漏输出: 8. 复用推挽输出 ...
- DirectX--Filter属性页的调用
IEnumFilters* pEnum; HRESULT hr ; if (pigb) { hr = pigb-> EnumFilters(&pEnum); if (FAILED(hr) ...
- touch.js下载使用方式
touch.js下载地址 https://gitee.com/mirrors/touch-js Touch 在开发移动端的应用中会使用到很多的手势操作,例如一指拖动.两指旋转等等,为了方便开放者快速集 ...
- Codeforces Round #467 (Div. 1) B. Sleepy Game
我一开始把题目看错了 我以为是博弈.. 这题就是一个简单的判环+dfs(不简单,挺烦的一题) #include <algorithm> #include <cstdio> #i ...