由於主流瀏覽器都只支持HTTP/2 Over TLS,也就是說當前HTTP/2網站都使用了HTTPS,數據傳輸都經過了SSL加密。
所以默認情況下,Wireshark抓到的包是這樣的,SSL層之上的協議細節完全看不到
Wireshark 的抓包原理是直接讀取並分析網卡數據,要想讓它解密 HTTPS 流量,有兩個辦法:
1)如果你擁有 HTTPS 網站的加密私鑰,可以用來解密這個網站的加密流量;
2)某些瀏覽器支持將 TLS 會話中使用的對稱密鑰保存在外部文件中,可供 Wireshark 加密使用。
Firefox 和 Chrome 都支持生成上述第二種方式的文件,具體格式見這里:NSS Key Log Format。
但 Firefox 和 Chrome 只會在系統環境變量中存在 SSLKEYLOGFILE 路徑時才會生成它,先來加上這個環境變量(以 OSX 為例):
# 新建sslkeylog.log文件
mkdir ~/tls && touch ~/tls/sslkeylog.log
# 添加環境變量
export SSLKEYLOGFILE=~/tls/sslkeylog.log
接着,在 Wireshark 的 SSL 配置面板的 「(Pre)-Master-Secret log filename」選項中這個文件選上。如下圖:
通過終端啟動 Firefox 或 Chrome(確保能讀取到環境變量):
open /Applications/Google\ Chrome.app
啟動chrome后訪問http2網站抓包結果如圖
已經可以看到http2請求的響應體了