从我的这篇博客前端也需要深度了解HTTPS协议可以知道。https协议是通过tls加密套算法保护下的http协议;传统的wireshark抓包,可以清楚的看到http协议每次交互的报文和内容,但是对于加密的https,实际通信是基于非对称加密算法后,在对称算法加密通道内的报文。在不知道生成的私钥情况下,是无法获取报文内容的;可以看到一般是这样的

本文就介绍一下,如何破解传输包的实际报文;
我们知道 HTTP 抓包工具 Fiddler 是通过开启本地代理进行抓包的,它能够解密 HTTPS 流量的原理很简单:首先 Fiddler 作为客户端跟服务端建立 TLS 连接,使用服务端的证书,处理请求和响应;然后 Fiddler 又作为服务端跟浏览器建立 TLS 连接,使用 Fiddler 的证书,处理请求和响应。所以 Fiddler 要解密 HTTPS 流量,需要先把它生成的根证书添加到系统受信任的根证书列表之中。
Wireshark 的抓包原理是直接读取并分析网卡数据,要想让它解密 HTTPS 流量,有两个办法:1)如果你拥有HTTPS 网站的加密私钥,可以用来解密这个网站的加密流量;2)某些浏览器支持将 TLS 会话中使用的对称密钥保存在外部文件中,可供 Wireshark 加密使用。本文重点介绍第二种方法。
Firefox 和 Chrome 都支持生成上述第二种方式的文件,具体格式见这里:NSS Key Log Format。但 Firefox 和 Chrome 只会在系统环境变量中存在 SSLKEYLOGFILE 路径时才会生成它,先来加上这个环境变量(以 OSX 为例):
mkdir ~/tls && touch ~/tls/sslkeylog.log
#zsh
echo "\nexport SSLKEYLOGFILE=~/tls/sslkeylog.log" >> ~/.zshrc && source ~/.zshrc
#bash
echo "\nexport SSLKEYLOGFILE=~/tls/sslkeylog.log" >> ~/.bash_profile && . ~/.bash_profile
windows:亲测需要三步
高级设置->环境变量,设置SSLKEYLOGFILE的路径;
打开一个新的cmd窗口,
set SSLKEYLOGFILE=D:/tlstest/sslkeylog.txt
同时访问任何一个https网站,观察是否生成了对应文件并产生内容;如果生成内容,进入下一步;
在 Wireshark 的 SSL 配置面板的 「(Pre)-Master-Secret log filename」选项中这个文件选上(编辑->=首选项->协议)。如下图

注意,这是老版本的wireshark,如果发现没有SSL选项,则选择TLS,新版本的是TLS;但是配置是一样的;
「SSL debug file」也建议配上,这样解密过程中的日志都会记录下来,便于调试。
新版 Wireshark 在配置了 TLS 加密后,会自动识别并解析 HTTPS 流量。访问想要抓包的 HTTPS 网站,根据 IP 和协议过滤一下,就可以轻松看到想要的 HTTPS 数据包了。如下图:

about:config,设置NSS_ALLOW_SSLKEYLOG为truewireshark到最新版本,并且在命令行启动它;