使用Wireshark解密tls流量
设置环境变量
在三大操作系统中都有SSLKEYLOGFILE这个环境变量,设置了这个变量以后,tls协议的交互当中,keylog都会存在文件里面。
windows:
创建文件start-fx.cmd
在start-fx.cmd文件中填写下列信息
@echo off
set SSLKEYLOGFILE=%USERPROFILE%\Desktop\keylogfile.txt
start firefox
然后运行文件即可
这个是wireshark官方的教程,默认是用的火狐浏览器,我们也可以用界面来设置:
从此处进入环境变量,然后设置系统变量:
变量名注意不要写错,变量值设置成自己想要keylog文件存放的地方,文件名也要写在最后,不过可以不用创建文件,设置完以后有tls协议经过网络流量的话,文件会自己生成。用火狐或者谷歌浏览器可以,其他的没有尝试,但有资料说只有这两个浏览器可以用SSLKEYLOGFILE变量导出密钥。
linux && macos
分别执行下面的命令即可:
linux:
export SSLKEYLOGFILE=$HOME/Desktop/keylogfile.txt
firefox
macos:
export SSLKEYLOGFILE=$HOME/Desktop/keylogfile.txt
open -a firefox
这样就设置完了,注意设置完以后浏览器要重启后访问https才能在keylog写入内容。
配置Wireshark
按照图示,从编辑(Edit) -> 首选项(Preferences) -> 协议(Protocol) -> 设置 (Pre)-Master-Secret log filename 为SSLKEYLOGFILE的文件路径,然后点ok保存
用百度搜索测试一下
过滤器设置tls,老版本可能是ssl
浏览器随便输入什么东西百度搜索一下
这个时候我们发现原本tls协议的加密数据,都可以看见http的明文了
如果想看前后区别可以把keylog的设置去掉一下,会发现http协议的这些包,都变成了tls的Application Data,是加密内容。
至此解密工作完成,tls1.2和1.3都可以完成解密。
额外内容:使用密钥文件解密
如果是事先获取了密钥文件的话,可以在这个地方导入RSA密钥来完成解密
设置系统变量以后可以获取密钥在文件里,如果是第三方想解密的话,需要想办法从客户端获取log文件或者密钥,即可完成解密。