之前在使用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 許可協議。轉載請註明出處!