之前在使用wireshark
作协议分析的时候,一直觉得它只能抓 HTTP 的报文,因此在抓 HTTPS 包的时候一直是用的Fiddler
,然而有一天我忽然想抓一下HTTP2
的报文看一看,Fiddler
就不行了,因而在一番 google 以后发现wireshark
是能够支持的,只不过须要在特定的条件下才能够。html
Fiddler
目前还不支持HTTP2
协议,没法看到真正的HTTP2
报文,这里有些人可能会有疑问,说我明明就用Fiddler
抓到了HTTP2
协议的报文啊,那是由于Fiddler
中间人攻击服务器经过协商把协议降级成了HTTP1
协议,因此实际上看到的仍是的HTTP1
的报文,经过下面两个图片能够直观的感觉到:nginx
能够看到在经过代理抓包的时候,协议变成了http/1.1
。git
如今市面上的主流浏览器实现的 HTTP2 都是基于TLS
的,也就是说要分析HTTP2
报文得先过了TLS
这一关,否则只能分析一堆加密的乱码。github
wireshark
支持两种方式来解密SSL/TLS
报文:windows
下面我来一一进行演示浏览器
若是你想抓取的网站是你本身的,那么能够利用这种方式,由于这须要使用网站生成证书使用的私钥进行解密,就是那个 nginx 上配置的ssl_certificate_key
对应的私钥文件,把它添加到 wireshark 配置中:安全
而后经过wireshark
就能够看到明文了:服务器
经过上图能够看到,我经过curl
访问的 https 协议的 URL,在配置了该服务器对应的私钥后能够抓取到对应的 HTTP 明文。网络
不过缺点也很是明显,只能分析本身持有私钥的网站,若是别人的网站就分析不了了,所幸的是还有第二种方案来支持。curl
目前该方案只支持Chrome
和Firefox
浏览器,经过设置SSLKEYLOGFILE
环境变量,能够指定浏览器在访问SSL/TLS
网站时将对应的密钥保存到本地文件中,有了这个日志文件以后wireshake
就能够将报文进行解密了。
首先设置SSLKEYLOGFILE
环境变量:
注:这是在 windows 系统上进行操做的,其它操做系统同理
wireshake
,首选项->Protocls->TLS:将第一步中指定的文件路径配置好
重启浏览器,进行抓包:
一样的能够抓取到 HTTP 明文。
注:不抓包时记得把环境变量删掉,以免性能浪费和安全性问题
方案二的优势很是明显,能够抓取任意网站的SSL/TLS
加密的报文,惟一的缺点就是只能是浏览器支持的状况才行,而方案一能够针对任何 HTTP 客户端进行抓包。
上面都是针对TLS+HTTP1
进行的抓包,市面上主流的浏览器的HTTP2
都是基于TLS
实现的,因此也是同样的,把TLS
这层解密了天然看到的就是最原始的明文。
这里以分析https://www.qq.com
为例,为何不是经典htts://www.baidu.com
,由于百度首页至今仍是HTTP/1.1
协议。
wiresharke
http2
关键字作过滤https://www.qq.com
HTTP2
报文:这样就抓取到了HTTP2
报文了,HTTP2 协议很是复杂,我也还在学习阶段,这里就很少说啥了。
wireshake 真的是一款很是强大的网络分析工具,在HTTPS
和HTTP2
日渐成为主流的时候,能够用它来帮助咱们加深对这些协议的理解,以便迎接新的机遇与挑战。
本文做者: MonkeyWie
本文连接: https://monkeywie.github.io/2020/08/07/wireshark-capture-https/
版权声明: 本博客全部文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!