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的根证书被加入到“受信任的根证书颁发机构”。

Fiddler抓取https设置及其原理相关推荐

  1. HTTPS-使用Fiddler抓取HTTPS数据包原理

    最近想尝试基于Fiddler的录制功能做一些接口的获取和处理工作,碰到的一个问题就是简单连接Fiddler只能抓取HTTP协议,关键的登录请求等HTTPS协议都没有捕捉到,所以想让Fiddler能够同 ...

  2. 【转载】在服务器上用Fiddler抓取HTTPS流量

    转载地址:https://yoursunny.cn/t/2011/FiddlerHTTPS/ 在服务器上用Fiddler抓取HTTPS流量 开发互联网应用的过程中,常常会设立或利用网络接口.为了调试对 ...

  3. 在服务器上用Fiddler抓取HTTPS流量

    http://yoursunny.com/t/2011/FiddlerHTTPS/ 阳光男孩 发表于2011-03-19 开发互联网应用的过程中,常常会设立或利用网络接口.为了调试对网络接口的使用,往 ...

  4. 浅谈HTTPS以及Fiddler抓取HTTPS协议

    原文 浅谈HTTPS以及Fiddler抓取HTTPS协议 最近想尝试基于Fiddler的录制功能做一些接口的获取和处理工作,碰到的一个问题就是简单连接Fiddler只能抓取HTTP协议,关键的登录请求 ...

  5. Fiddler抓取HTTPs流量

    Fiddler抓取HTTPS流量的原理 TLS是一种端到端的传输层加密协议,是HTTPS协议的一个组成部分.访问HTTPS站点时,HTTP请求.响应都通过TLS协议在浏览器和服务器之间加密传输,并且通 ...

  6. 抓包工具Fiddler的使用教程(十二)下:Fiddler抓取HTTPS

    在教程十二(上),我们也了解了HTTPS协议,该教程就和大家分享Fiddler如何抓取HTTPS 抓包工具Fiddler的使用教程(十二):[转载]HTTPS协议 再次回忆一下关键内容: iddler ...

  7. Fiddler抓取https相关设置

    转自:https://www.cnblogs.com/joshua317/p/8670923.html 很多使用fiddler抓包,对于http来说不需太多纠结,随便设置下就能用,但是抓取https就 ...

  8. 如何用fiddler抓取HTTPS的详细教程(附fiddler安装教学)

    对于想抓取HTTPS的测试初学者来说,常用的工具就是fiddler,可是在初学时,大家对于fiddler如何抓取HTTPS真是伤了脑筋,可能你一步步按着网上的帖子成功了,那当然是极好的,有可能没有成功 ...

  9. Fiddler抓取HTTPS最全(强)攻略!

    对于想抓取HTTPS的测试初学者来说,常用的工具就是fiddler. 但是初学时,大家对于fiddler如何抓取HTTPS难免走歪路,也许你一步步按着网上的帖子成功了,这自然是极好的. 但也有可能没那 ...

最新文章

  1. C++的类什么时候需要虚析构函数
  2. linux下的SIGINT的作用,signal(SIGINT,stop)的问题,大家进来看下!!!
  3. Openldap配置TLS加密传输(完整版——shell脚本实现[即在客户端执行代码,即可实现TLS加密])
  4. ASP.NETMVC View页面 序列化 c# Model 为 Json字符串
  5. 关于fmincon和cvx
  6. 性能测试篇 :Jmeter监控服务器性能
  7. system verilog随机函数_systemverilog中的随机化激励.pdf
  8. PMP:4.项目整合管理
  9. 通过MySQL存储原理来分析排序和锁
  10. 哪款浏览器好用_超级实用!让你效率倍增的6款浏览器插件
  11. unity头顶状态制作_Unity中结合IK实现Lookat
  12. 最受欢迎Java数据库访问框架(DAO层)
  13. ATAT的安装bug在centos7--换了个其他集群安装确没有问题(可能和系统的配置相关)
  14. ArcGIS API for JavaScript 加载水经注离线地图
  15. 读书笔记:《管理的常识》
  16. https证书中比较便宜的证书
  17. windows批处理:start的用法
  18. 2021年茶艺师(中级)复审考试及茶艺师(中级)理论考试
  19. Lio_sam运行测试环节遇到的问题以及实测总结
  20. python拼音数字输出接口_python: 拼音处理模块

热门文章

  1. Ubuntu如何安装setuptools
  2. 【C++ grammar】数据类型转换、列表初始化
  3. java类只读怎么办_如何在Java中制作一个只读类?
  4. 显卡测试软件毛毛虫,超龙超龙,与众不同,顶流配备,散热一流,3070Ti超龙旗舰版评测...
  5. oracle中的with的用法,oracle中with子句的用法(转)
  6. 204. 计数质数 golang
  7. java经典设计模式4,JAVA设计模式(4) 之装饰设计模式
  8. C语言 二级指针内存模型混合实战
  9. 【算法】学习笔记(1):算法就是人类去教会计算机的方法
  10. 【C++ Priemr | 15】派生类向基类转换的可访问性