我雲了,原來wireshark能夠抓HTTPS明文包

前言

之前在使用wireshark作協議分析的時候,一直覺得它只能抓 HTTP 的報文,因此在抓 HTTPS 包的時候一直是用的Fiddler,然而有一天我忽然想抓一下HTTP2的報文看一看,Fiddler就不行了,因而在一番 google 以後發現wireshark是能夠支持的,只不過須要在特定的條件下才能夠。html

Fiddler 存在的問題

Fiddler目前還不支持HTTP2協議,沒法看到真正的HTTP2報文,這裏有些人可能會有疑問,說我明明就用Fiddler抓到了HTTP2協議的報文啊,那是由於Fiddler中間人攻擊服務器經過協商把協議降級成了HTTP1協議,因此實際上看到的仍是的HTTP1的報文,經過下面兩個圖片能夠直觀的感覺到:nginx

  • 不經過代理,直接訪問支持 HTTP2 的服務

  • 經過代理訪問,進行抓包

能夠看到在經過代理抓包的時候,協議變成了http/1.1git

使用 wireshark 抓取

如今市面上的主流瀏覽器實現的 HTTP2 都是基於TLS的,也就是說要分析HTTP2報文得先過了TLS這一關,否則只能分析一堆加密的亂碼。github

wireshark支持兩種方式來解密SSL/TLS報文:windows

  1. 經過網站的私鑰
  2. 經過瀏覽器的將 TLS 對稱加密祕保存在外部文件中,以供 wireshark 加解密

下面我來一一進行演示瀏覽器

1. 經過網站的私鑰

若是你想抓取的網站是你本身的,那麼能夠利用這種方式,由於這須要使用網站生成證書使用的私鑰進行解密,就是那個 nginx 上配置的ssl_certificate_key對應的私鑰文件,把它添加到 wireshark 配置中:安全

而後經過wireshark就能夠看到明文了:服務器

經過上圖能夠看到,我經過curl訪問的 https 協議的 URL,在配置了該服務器對應的私鑰後能夠抓取到對應的 HTTP 明文。網絡

不過缺點也很是明顯,只能分析本身持有私鑰的網站,若是別人的網站就分析不了了,所幸的是還有第二種方案來支持。curl

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日漸成爲主流的時候,能夠用它來幫助咱們加深對這些協議的理解,以便迎接新的機遇與挑戰。

參考

本文做者: MonkeyWie
本文連接: https://monkeywie.github.io/2020/08/07/wireshark-capture-https/
版權聲明: 本博客全部文章除特別聲明外,均採用 BY-NC-SA 許可協議。轉載請註明出處!
相關文章
相關標籤/搜索