由于主流浏览器都只支持 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 请求的响应体了
原文链接: https://jesse121.github.io/blog/articles/2020/04/12.html
版权声明: 转载请注明出处.