fiddler 抓包原理

2,963 阅读4分钟

fiddler 抓包原理

客户端(浏览器)与服务器之间通过建立TCP连接以HTTP协议进行通信,浏览器默认通过自己发送HTTP请求到服务器。而Fiddler是c#开发的http代理服务器,fiddler工作于七层中的应用层,能够捕获到通过的http(s)请求。fiddler启动后会自动将代理服务器设置为本机,端口8888。 启动之后,会看到:

角色关系图

抓包其中涉及三个角色: 客户端 、 代理、 目标服务器

原本正常访问网页或App路径是:

  • 客户端 ---> 目标服务器
  • 抓包,其实就加入了一个代理,即:客户端 ---> 媒人(代理)-->目标服务器
  • 只有这三者产生一定的联系,才能进行拦截/抓取一些东西,客户端先访问媒人,媒人把客户端的信息记录下来,媒人再去联系目标服务器,进而返回给客户端。

Fiddler 抓取https 报文过程:

详细过程解析:

+ 客户端请求建立HTTPS连接,发送客户端支持的加密协议和版本列表等信息给服务器;
+ Fiddler接受客户端的请求并伪装成客户端发送相同的请求给Web服务器;
+ Web服务器收到Fiddler的请求后,从请求中筛选出合适的加密协议并返回服务器CA证书,证书中包含公钥信息;
+ Fiddler收到服务器响应之后,保存服务器证书并自签名一个证书,伪装成服务器将该证书下发给客户端;
+ 客户端验证证书的合法性(Fiddler能否抓取到HTTPS报文关键就看这一步了)(证书都是由CA组织下认可的根证书Root签发的);
+ 客户端生产对称密钥并使用自签名证书的公钥进行加密,发送给服务器;
+ Fiddler拦截客户端的请求之后,使用私钥解密该报文,获取对称密钥并使用CA证书的公钥加密,再发送给Web服务器;
+ Web服务器接收到客户端加密后的对称密钥,采用私钥解密,并使用对称密钥解密测试数据传给客户端;
+ Fiddler使用前面获取的对称密钥解密报文;
+ 客户端验证数据无误后,HTTPS连接建立完成,此时客户端开始向服务器发送使用对称密钥加密的业务数据;
+ Fiddler使用前面获取的对称密钥解密客户端发送的数据并重新加密转发给客户端。

https基本原理,是用非对称密钥协商出对称密钥,再用对称密钥来加密业务数据。

简述密钥协商、握手步骤。

  • 客户端请求连接服务器,发送客户端支持的加密协议和版本列表等信息给服务器
  • 服务端确认加密方法,并发送CA证书(证书中包含公钥)给客户端
  • 客户端验证证书的可靠性(是否有效?是否合法?),并从CA证书中取出公钥,然后生成一个随机密钥K, 并用公钥加密得到K'发送给服务端。
  • 服务端收到 k' 后用自己的私钥解密得到 k。
  • 此时双方都得到了密钥 k,接下来就用密钥k数据传输,协商完成。

软件下载:

Fiddler官方下载地址:(Fiddler安装包 → FiddlerSetup.exe)

Willow插件官方下载地址:(Willow插件安装包 → WillowSetup-1.5.2.zip)

nginx 正向代理、反向代理解释

正向代理最大的特点:

  • 客户端非常清楚明确要访问的服务器地址
  • 服务器只清楚请求来自哪个代理服务器,而不清楚来自哪个具体的客户端
  • 正向代理模式屏蔽或者隐藏了真实客户端信息 反向代理,主要用于服务器集群分布式部署的情况下,反向代理隐藏了服务器的信息。

明白了fiddler 的原理,其实就清楚了。

tips: node 做中间代理服务器的时候,会遇到 fiddler,whistle,charles 之类的软件抓不到(fiddler的原理就是一个代理服务器,说明node的请求没有经过Fiddler代理服务器)

fiddler 设置断点

附上大图