前言

以前在应用wireshark做协定剖析的时候,始终认为它只能抓 HTTP 的报文,所以在抓 HTTPS 包的时候始终是用的Fildder,然而有一天我忽然想抓一下HTTP2的报文看一看,Fildder就不行了,于是在一番 google 之后发现wireshark是能够反对的,只不过须要在特定的条件下才能够。

Fildder 存在的问题

Fildder目前还不反对HTTP2协定,无奈看到真正的HTTP2报文,这里有些人可能会有疑难,说我明明就用Fildder抓到了HTTP2协定的报文啊,那是因为Fiddler中间人攻打服务器通过协商把协定降级成了HTTP1协定,所以实际上看到的还是的HTTP1的报文,通过上面两个图片能够直观的感触到:

  • 不通过代理,间接拜访反对 HTTP2 的服务

  • 通过代理拜访,进行抓包

能够看到在通过代理抓包的时候,协定变成了http/1.1

应用 wireshark 抓取

当初市面上的支流浏览器实现的 HTTP2 都是基于TLS的,也就是说要剖析HTTP2报文得先过了TLS这一关,不然只能剖析一堆加密的乱码。

wireshark反对两种形式来解密SSL/TLS报文:

  1. 通过网站的私钥
  2. 通过浏览器的将 TLS 对称加密秘保留在内部文件中,以供 wireshark 加解密

上面我来一一进行演示

1. 通过网站的私钥

如果你想抓取的网站是你本人的,那么能够利用这种形式,因为这须要应用网站生成证书应用的私钥进行解密,就是那个 nginx 上配置的ssl_certificate_key对应的私钥文件,把它增加到 wireshark 配置中:

而后通过wireshark就能够看到明文了:

通过上图能够看到,我通过curl拜访的 https 协定的 URL,在配置了该服务器对应的私钥后能够抓取到对应的 HTTP 明文。

不过毛病也非常明显,只能剖析本人持有私钥的网站,如果他人的网站就剖析不了了,所幸的是还有第二种计划来反对。

2. 通过浏览器的 SSL 日志性能

目前该计划只反对ChromeFirefox浏览器,通过设置SSLKEYLOGFILE环境变量,能够指定浏览器在拜访SSL/TLS网站时将对应的密钥保留到本地文件中,有了这个日志文件之后wireshake就能够将报文进行解密了。

  1. 首先设置SSLKEYLOGFILE环境变量:

    注:这是在 windows 零碎上进行操作的,其它操作系统同理
  2. 配置wireshake,首选项->Protocls->TLS:

    将第一步中指定的文件门路配置好

  3. 重启浏览器,进行抓包:

    同样的能够抓取到 HTTP 明文。

    注:不抓包时记得把环境变量删掉,以防止性能节约和安全性问题

计划二的长处非常明显,能够抓取任意网站的SSL/TLS加密的报文,惟一的毛病就是只能是浏览器反对的状况才行,而计划一能够针对任何 HTTP 客户端进行抓包。

通过 wireshake 抓取 HTTP2 报文

下面都是针对TLS+HTTP1进行的抓包,市面上支流的浏览器的HTTP2都是基于TLS实现的,所以也是一样的,把TLS这层解密了天然看到的就是最原始的明文。

这里以剖析https://www.qq.com为例,为什么不是经典htts://www.baidu.com,因为百度首页至今还是HTTP/1.1协定。

  1. 应用下面的第二种计划配置好wiresharke
  2. 通过http2关键字做过滤
  3. 浏览器拜访https://www.qq.com
  4. 查看HTTP2报文:

    这样就抓取到了HTTP2报文了,HTTP2 协定非常复杂,我也还在学习阶段,这里就不多说啥了。

后记

wireshake 真的是一款十分弱小的网络分析工具,在HTTPSHTTP2日渐成为支流的时候,能够用它来帮忙咱们加深对这些协定的了解,以便迎接新的时机与挑战。

参考

  • 应用 Wireshark 调试 HTTP/2 流量
本文作者: MonkeyWie
本文链接: https://monkeywie.github.io/2020/08/07/wireshark-capture-https/
版权申明: 本博客所有文章除特地申明外,均采纳 BY-NC-SA 许可协定。转载请注明出处!