Fiddler抓取https设置及其原理

Fiddler抓取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)发给客户端

第三步:客户端接到服务器的响应

验证证书的合法性(颁发证书的机构是否合法,证书中包含的网站地址是否与正在访问的地址一致等)。如果证书受信任,则浏览器栏里面会显示一个小锁头,否则会给出证书不受信的提示。 

如果证书受信任,或者是用户接受了不受信的证书,客户端做以下事情:

  1. 生成密码:浏览器会生成一串随机数的密码(Pre_master),并用CA证书里的公钥加密(enc_pre_master),用于传给服务器。
  2. 计算协商密钥:enc_key=Fuc(random_C, random_S, Pre-Master)
  3. 生成握手信息:使用约定好的HASH计算握手消息,并使用协商密钥enc_key及约定好的算法对消息进行加密。
  4. 发送以下信息到服务器:
    1. 用公钥加密过的服务器随机数密码enc_pre_master
    2. 客户端发给服务器的通知,"以后我们都要用约定好的算法和协商密钥进行通信的哦"。
    3. 客户端加密生成的握手信息。

第四步,服务器接收客户端发来的数据要做以下四件事情:

  1. 私钥解密:使用自己的私钥从接收到的enc_pre_master中解密取出密码Pre_master。
  2. 计算协商密钥:enc_key=Fuc(random_C, random_S, Pre-Master)
  3. 解密握手消息:使用协商密钥enc_key解密客户端发来的握手消息,并验证HASH是否与客户端发来的一致。
  4. 生成握手消息使用协商密钥enc_key及约定好的算法加密一段握手消息,发送给客户端。这里要发的数据有两条:
    1. 服务器发给客户端的通知,”听你的,以后我们就用约定好的算法和协商密钥进行通信哦“。
    2. 服务器加密生成的握手信息。

第五步,客户端拿到握手信息解密,握手结束。

客户端解密并计算握手消息的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相当于代理,客户端和服务器交互都要通过fiddler,Fiddler抓取HTTPS协议成功的关键是根证书(根证书是CA认证中心给自己颁发的证书,是信任链的起始点。安装根证书意味着对这个CA认证中心的信任。),这是一个信任链的起点,这也是Fiddler伪造的CA证书能够获得客户端和服务器端信任的关键。

没有受信任的fiddler根证书,不能让客户端相信fiddler伪造的CA证书,从而得到Pre_master。

接下来我们就来看如果设置让Fiddler抓取HTTPS协议。

Fiddler菜单->Tools->Telerik Fiddler Options

在跳出的对话框点击‘Yes’

在跳出的对话框点击‘是(Y)’后,通过IE的Internet选项,我们可以看到Fiddler的根证书被加入到“受信任的根证书颁发机构”。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/386951.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

springboot 返回json字符串格式化问题

在idea中yml文件中添加以下注解就可以格式化json字符串效果 spring: jackson: serialization: indent-output: true 原返回json格式为: {"isSuccess":"ok","code":"0","message":"success",&…

RUNOOB python练习题10

用来练手的python 练习题,原链接 : python练习实例9 题干 : 暂停两秒输出,并格式化当前时间。 import time,datetimeTIME datetime.datetime.now() print(TIME.strftime("%Y.%m.%d %H-%M-%S")) time.sleep(2) TIME datetime.datetime.now(…

HTTPS连接过程以及中间人攻击劫持

HTTPS连接过程以及中间人攻击劫持 目前很多应用都用webview加载H5页面,如果服务端采用的是可信CA颁发的证书,在 webView.setWebViewClient(webviewClient) 时重载 WebViewClient的onReceivedSslError() ,如果出现证书错误,直接调…

Cookie、cookie使用方法

Cookie、cookie使用方法、保存用户名密码 //设置Cookie,//cname 获取时所需参数//username,password 用于记住账号密码,如果只要存一个参数 password为空即可//exdays 设置过期参数 设为负数即可删除(如-1)function setCookie(c…

RUNOOB python练习题12 找素数问题

用来练手的python 练习题,原链接 : python练习实例12 题干 : 判断101-200之间有多少个素数,并输出所有素数 源代码如下: import numpy as np bound np.arange(101,201,1) result np.array([]) for k in bound:for i in range(k):# 如果k存在不是1或…

Linux: centOS6.5 RabbitMQ

在大多数大公司,像应用服务器软件的安装、部署都是运维的事情,其实自己去尝试部署一下,也是有收获的。 有机会正好尝试了Linux下的rabbitMq安装过程,做了记录,希望有用到的人可以做下参考。 安装环境: Li…

RUNOOB python练习题13 水仙花数

用来练手的python 练习题其十三,原链接 : python练习实例13 题干 : 打印出所有的"水仙花数",所谓"水仙花数"是指一个三位数,其各位数字立方和等于该数本身。例如:153是一个"水仙花数",…

OsharpNS轻量级.net core快速开发框架简明入门教程-代码生成器的使用

OsharpNS轻量级.net core快速开发框架简明入门教程 教程目录 从零开始启动Osharp 1.1. 使用OsharpNS项目模板创建项目 1.2. 配置数据库连接串并启动项目 1.3. OsharpNS.Swagger使用实例(登录和授权) 1.4. Angular6的前端项目启动Osharp代码生成器的使用 2.1 生成器的使用 2.2 生…

RUNOOB python练习题 14

用来练手的python 练习题其十四,原链接 : python练习实例14 题干 : 将一个正整数分解质因数。例如:输入90,打印出90233*5。 拿到题目,我们就可以看出,首先我们需要一个函数来判断某一正整数是否为质数,然后还需要一个…

关于作者

北京某公司渗透工程师 Web渗透、PHP/Java代码审计、安全研究 想换一份工作,求推荐。转载于:https://www.cnblogs.com/dgjnszf/p/10779097.html

centos7通过yum安装JDK1.8

安装之前先检查一下系统有没有自带open-jdk 命令: rpm -qa |grep java rpm -qa |grep jdk rpm -qa |grep gcj 如果没有输入信息表示没有安装。 如果安装可以使用rpm -qa | grep java | xargs rpm -e --nodeps 批量卸载所有带有Java的文件 这句命令的关键字是j…

一个电脑的重装到java开发环境安装配置的全过程

刚拿到一台别人用过的电脑。看着c盘爆满,而且用了还是windows7操作系统,强迫症发作马上就准备重装系统。 之前换固态使用wepe制作U盘启动盘装系统的步骤和过程全部忘记的,贼尴尬。 同事都看不过眼了 使用UltraISO这个软件帮我做了U盘启动盘 …

RUNOOB python练习题17

用来练手的python 练习题其十三,原链接 : python练习实例17 题干 : 输入一行字符,分别统计出其中英文字母、空格、数字和其它字符的个数 这个例题让我回忆起了远古的记忆,python str类的 isalpha,isspace,isdigit方法。这些方法通过比较ASC…

Centos7下使用ELK(Elasticsearch + Logstash + Kibana)搭建日志集中分析平台

Centos7下使用ELK(Elasticsearch Logstash Kibana)搭建日志集中分析平台 日志监控和分析在保障业务稳定运行时,起到了很重要的作用,不过一般情况下日志都分散在各个生产服务器,且开发人员无法登陆生产服务器&#xf…

叠数的加法与字符串 RUNOOB python练习题 18

用来练手的python 练习题其十八,原链接 : python练习实例18 题干: 求saaaaaaaaaaaa…a的值,其中a是一个数字。例如222222222222222(此时共有5个数相加),几个数相加由键盘控制 这种类型的叠数相加,让我不禁联想到了python中&…

wget在linux中安装出现错误解决办法

在使用wget命令报错 certificate common name xxx doesnt match requestde host name,我们一般的解决办法是查找下载地址,但是有时候更换地址也会发生错误, wget http://www.monkey.org/~provos/libevent-1.2.tar.gz 报如下错: er…

linux下elasticsearch的安装

首先安装jdk 下载elasticsearch wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-6.2.4.tar.gz 解压 tar -zxvf elasticsearch-6.2.4.tar.gz 移动项目到/usr目录下 mv elasticsearch-6.2.4 /usr 启动es /usr/elasticsearch-6.4.2/bin/elastic…

RUNOOB python练习题19 找出1000以内的所有完数

用来练手的python 练习题,原链接 : python练习实例19 题干: 一个数如果恰好等于它的因子之和,这个数就称为"完数"。例如61+2+3.编程找出1000以内的所有完数。 首先我们要理解,什么是完数。根据百度词条&am…

金蝶学习网站

https //vip.kingdee.com/转载于:https://www.cnblogs.com/RogerLu/p/10784498.html

Kibana linux下安装

1、kibana简介 Kibana是一个开源的分析与可视化平台,设计出来用于和Elasticsearch一起使用的。你可以用kibana搜索、查看、交互存放在Elasticsearch索引里的数据,使用各种不同的图表、表格、地图等kibana能够很轻易地展示高级数据分析与可视化。 Kiban…