1.简介

由于近几年来各大网站越来越注重安全性都改成了 https 协议,不像前十几年前直接是 http 协议直接裸奔在互联网。还有的小伙伴或者童鞋们按照上一篇宏哥的配置都配置好了,想大展身手抓一下百度的包,结果一试傻眼了,竟然毛都没有抓到,怀疑是不是上了宏哥的当了。不是的哈,今天宏哥趁热打铁接着讲解如何抓取 https 协议会话。

2.什么是 HTTPS?

HTTPS 就是加过密的 HTTP。使用 HTTPS 后,浏览器客户端和 Web 服务器传输的数据是加密的,只有浏览器和服务器端知道内容。

HTTPS = HTTP + TLS 或者 SSL。采用 HTTPS 的网站需要数字证书认证机构(Certificate Authority,CA)申请证书。

通过这个证书,浏览器在请求数据前与 Web 服务器有几次握手验证,以证明相互的身份,然后对 HTTP 请求和响应进行加密。

3.HTTPS 协议传输的原理

HTTPS 协议传输的原理和过程简图如下所示:

4.Fiddler 捕获 Http 协议会话

Fiddler 是一个很好的抓包工具,默认是抓 Http 协议请求的(经过上一篇的配置就可以成功捕获),但是不会捕获 Https 协议会话,需要你进一步配置才能抓取 Https 会话。如下图所示:

5.Fiddler 抓取 HTTPS 原理

现在无论是网站还是 APP 中的数据传输基本上都使用 HTTS 传输,传输的数据都是经过加密的,这增加了我们分析数据包的难度,还好 Fiddler 除了可以抓取 HTTP 数据包,还可以抓取 HTTPS 数据包。由于 HTTPS 传输需要使用到 CA 证书,所以抓取抓取 HTTPS 数据包时需要做一些特殊配置。Fiddler 截取 HTTPS 报文的流程大致如下:

上图图解说明:

1) 客户端请求建立 HTTPS 链接,发送客户端支持的加密协议及版本列表等信息给服务器端。
2) Fiddler 接受客户端请求并伪装成客户端向 WEB 服务器发送相同的请求。
3) WEB 服务器收到 Fiddler 的请求以后,从请求中筛选合适的加密协议。并返回服务器 CA 证书,证书中包括公钥信息。
4) Fiddler 收到 WEB 服务器的响应后保存服务器证书并自签名一个 CA 证书,伪装成服务器,把该证书下发给客户端。
5) 客户端验证证书合法性。(Fiddler 能否抓取到 HTTPS 报文关键看这一步)。
6) 客户端生产对称密钥,通过证书的公钥加密发送给服务器。
7) Fiddler 拦截客户端的请求以后,使用私钥解密该报文,获取对称加密秘钥,并使用服务器证书中带的公钥加密该对称密钥发送给 WEB 服务器。此时对称密钥已经泄露了,以后可以使用该秘钥界面客户端和服务器端传输的数据。
8) WEB 服务器接收到客户端发送的加密的对称密钥后使用私钥解密,并使用对称密钥加密测试数据传给客户端。
9) Fiddler 使用前面获取的对称密钥解密报文。
10) 客户端验证数据无误以后 HTTPS 连接就建立完成,客户端开始向服务器发送使用对称密钥加密的业务数据。
11) Fiddler 使用前面获取的对称密钥解密客户端发送的数据并重新加密转发给客户端。

6.Fiddler 捕获 Https 协议会话

默认情况下,Fiddler 不会捕获 HTTPS 请求,需要进行设置。

当浏览器访问 HTTPS 网页的时候,Fiddler 能捕获到很多握手验证的请求,比如用浏览器访问:Https://www.baidu.com ,在 Fiddler 中就能抓到很多 “Tunnel to” 的请求,如下图所示:

1.在没有进一步配置之前用 Fiddler 抓包时候,分别用 FireFox 和 Chrome 浏览器打开百度网页:https://www.baidu.com 可以在会话面板看到百度信息,但是进行查看是 Fiddler 的监控面板出现黄色的告警 “Https decryption is disabled click to configure”(翻译:https 解密被禁用 ,点击配置)。至于 IE 浏览器,微软已经官宣它已经要落幕退役,宏哥这里就不做过多的介绍了。当然了 Firefox 浏览器有些版本也会有特殊情况需要你进一步配置,这个宏哥在后边会做介绍的。如下图所示:

从上图中我们可以清楚地看到 Host 列中出现 Tunnel to...字样”,总之以后如果会话列表中的 Host 列中出现 Tunnel to...字样都说明是证书的问题, 这种就不能抓取到我们想要的会话。那么要抓取 https 协议的会话需要打开配置安装证书才可以,毕竟目前很多网站都是 https 协议的, 所以在抓包之前,我们还要配置一下证书 否则无法抓包。那么接下来跟随宏哥看看 Fiddler 如何配置证书。

6.1Fiddler 证书配置

1.启动 FIddler,然后在菜单栏点击 Tools---->Options---->HTTPS 。如下图所示:

2.依次勾选 “Capture HTTPS CONNECTs”(捕获 HTTPS 连接)和勾选 “Decrypt HTTPS traffic”(解密 HTTPS 流量),然后会弹出一个对话框 直接点击 YES 即可。如下图所示:

敲黑板!!!

你是第一次安装的 Fiddler 那么正常情况下会弹出证书安装的相关提示。如果有的小伙伴或者童鞋们没有弹出提示,你也不要着急上火和担心,你可以点击 Actions---> Trust Root Certificate(信任根证书) 就会弹出一模一样的证书安装相关提示。如下图所示:

3.点击 “Yes” 后,接下来弹出的对话框全部傻瓜式地点击 “是” 即可。如下图所示:

4.弹出 “Added Fiddler's root certificate to the Machine Root list”(将 Fiddler 的证书添加到机器根目录列表中) ,点击 “确定”。如下图所示:

5.最后把下面的:“Ignore server certificate errors(unsafe)” 忽略服务器证书错误(不安全)和 “check for certificate revocation ”(证书撤销检查) 这两个选项也勾选上。如下图所示:

到此证书也已经安装到 Fiddler 上了。

6.2 查看安装到 Fiddler 的证书

6.2.1 方法一

1.我们可以点击 Actions 中选择 Open Windows Certificate Manager 这一个选项, 打开打开 Windows 证书管理器去查看。如下图所示:

2.打开打开 Windows 证书管理器 之后点击菜单栏上的 操作--->查找证书然后输入 Fiddler 就会查找出证书了(如果没有说明没有安装成功),如下图所示:

3.证书名为 DO_NOT_TRUST_FiddlerRoot 大家可以对照着看看。如下图所示:

6.2.2 方法二

1.WIN+R 打开运行,输入 certmgr.msc 回车,点击 “受信任的根证书颁发机构--->点击 “证书”。查看,如下图所示:

6.3 信任证书

证书安装了之后 还要设置一下信任才行。具体操作步骤如下:

1.直接选择 Tools--->Options---->HTTPS---->Actions--->Trust Root Certificate 。如下图所示:

2.在接下来弹出的对话框中直接点击确定或 yes 就行了,如下图所示:

好了到此为止,大功告成!现在如果不出意外的话就可以进行正常的抓取 HTTPS 包了。

敲黑板!!!

如果还是不行,那么最好重置一下证书 在 Actions 中选择 Reset All Certificates(重置所有证书) 然后点击确定删除 Fiddler 所配置的证书,最后重新执行之前的步骤就可以了。

7.小结

今天宏哥主要简单的讲解和分享了 Fiddler 如何设置捕获 Https 会话 ,后边会一一展开进行详细的分享和讲解,好了时间不早了今天就到这里,感谢大家耐心地阅读!!!

会遇到的问题:

证书导出失败,出现如下提示:Unable to configure Windows to Trust the Fiddler Root.... 如下图所示:

解决方案:

找到 fiddler->工具栏 tools->options,再选择 HTTPS,点击 CertEnroll engine,选择 MakeCert 即可点击 OK 保存,最后切记重启 fiddler!!!

8.拓展

我们在 Skip decryption 中输入 ip 地址或者域名可以用来跳过该主机或域名的 https 数据抓取,这个也相当于一种过滤功能吧!如下图所示:


↙↙↙阅读原文可查看相关链接,并与作者交流