前言:如果你看到此篇文章是为了解决抓包问题的话那么请看我的其它文章介绍。此篇文章只是介绍基础的知识,关于抓包成功页面的Tunnel to….443太多,从而来隐藏的问题。
一、HTTPS通信
1、最基本的https通信
普通的https通信,具体的过程就不解释了.....
2、加入了Fiddler之后
Fiddler中的HTTPS通信
1、Fiddler截获客户端发送给服务器的HTTPS请求,Fiddler伪装成客户端向服务器发送请求进行握手。
2、服务器发回相应,Fiddler获取到服务器的CA证书,用root证书公钥进行解密,验证服务器数据签名,获取到服务器CA证书公钥。然后Fiddler伪造自己的CA证书,冒充服务器证书传递给客户端浏览器。
3、与普通过程中客户端的操作相同,客户端根据返回的数据进行证书校验、生成密码Pre_master、用Fiddler伪造的证书公钥加密,并生成HTTPS通信用的对称密钥enc_key。
4、客户端将重要信息传递给服务器,又被Fiddler截获。Fiddler将截获的密文用自己伪造证书的私钥解开,获得并计算得到HTTPS通信用的对称密钥enc_key。Fiddler将对称密钥用服务器证书公钥加密传递给服务器。
5、与普通过程中服务器端的操作相同,服务器用私钥解开后建立信任,然后再发送加密的握手消息给客户端。
6、Fiddler截获服务器发送的密文,用对称密钥解开,再用自己伪造证书的私钥加密传给客户端。
7、客户端拿到加密信息后,用公钥解开,验证HASH。握手过程正式完成,客户端与服务器端就这样建立了“信任”
二、Tunnel to 是什么?
1、解读Tunnel to
在抓包的时候,有时候会遇到很多的Tunnel to,图标是一把锁的形状,使用的方法是CONNECT,如下图:
查阅资料得知:
connect是为了建立http tunnel ,connect是http众多方法中的其中一种,它跟post、get、put、options方法是并列的。但是它的使用场景很特殊。只有在受限制的网络环境中(防火墙、NAT、代理器)并且是https通信时,客户端使用http connect请求代理服务器,代理服务器使用connect方法与目标服务器建立http tunnel,通道建立后,客户端与服务器进行通信,代理服务器就像透明一样,只是接收、转发tcp stream。
2、为什么要建立http tunnel呢?
这是因为网络环境受限,客户端无法直接访问某些网络,所以只能通过代理服务器访问网络,然后,将内容转发给客户端,从宏观上看,客户端与服务器端就像建立了一条隧道一样。但是由于http tunnnel可控性不强,所以服务器通常会限制 “可connect的端口” (一般只开放SSL的443端口)
所以会看到,Tunnel to *****:443
3、出现大量connect连接?
因为fiddler是代理,访问百度网页(使用了https协议),满足了使用connect条件,所以客户端会使用connect方法与目标服务器建立http tunnel,一旦connection建立完成,后续fiddler会转发、接收所有的tcp stream。
所以如上图所示,访问https://www.baidu.com之前出现了tunnel to www.baidu.com:443
当然,并不是所有的受限网络(restricted network),https通信时,都会使用connect建立http tunnel ,如果目标服务器限制connect方法,那么就会使用其它方法来建立通道(post/get);如果服务器不支持http tunnel,那么就需要安装http tunnel server端的程序,客户端不支持http tunnel,那么客户端就需要安装http tunnel client程序;http tunnel程序包含两部分,server端程序和client端程序;
4、如何隐藏
如果你看着tunnel to不习惯的话,可以将其隐藏掉:菜单栏 > Rules > Hide CONNECTs
总结:在抓取HTTPS的数据包时,Fiddler会话栏显示“Tunnel to….443”的信息,这个是什么原因呢?
1、Connect表示HTTPS的握手(也就是认证信息,只要是HTTPS就要进行认证)
2、我们抓包是为了看HTTP/HTTPS请求和响应的数据内容,而不关心HTTPS的通信是怎么建立连接的,隐藏了,Fiddler就不会捕获大量无用的握手验证请求。
注意事项:Fiddler安装和使用的时候需要关闭杀毒软件!
如果觉得不错,请点赞。谢谢~.~