乐趣区

关于http:我云了原来wireshark可以抓HTTPS明文包

前言

以前在应用 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 许可协定。转载请注明出处!

退出移动版