HTTPS是使用TLS对HTTP进行加密,过程中使用了非对称加密和对称加密算法。
早期的HTTPS一种实现过程:
这种方式下,通过抓包,可以获得公钥,如果手里也有服务器上的私钥,就能解密出对称加密的密钥,进而也就能解密出最后的通信内容。因此服务端私钥一定要妥善保存不要
但是,当前HTTPS并不是直接用公钥加密对称加密阶段的密钥,而是使用如Diffie-Hellman (DH)密钥交换算法,这时密钥通过计算得出,中间抓包是无法获取最终加密密钥的。
因此只是给WireShark配置服务器私钥是不能解开所有HTTPS的。
因此要想解开HTTPS内容,必须客户端配合,给你对称加密时的密钥。
答案是:配置环境变量 SSLKEYLOGFILE
此环境变量的内容是个文件路径,当设置SSLKEYLOGFILE环境变量时,TLS的底层库(NSS、OpenSSL或boringssl)将每个会话所需的密钥写入文件。随后可以在Wireshark中配置此文件。
具体的操作过程如下:
一、配置WireShark
在桌面创建一个keylogfile.txt文件
打开WireShark--》编辑--》首选项--》协议(Protocols)--》TLS(旧版本是SSL)
在(Pre)-Master-Secret log filename项,配置文件地址:
二、配置环境变量,启动浏览器
关掉你所用浏览器的所有实例,然后编写如下脚本,此脚本中的firefox可以按需改成chrome:
Windows:
@echo off
set SSLKEYLOGFILE=%USERPROFILE%\Desktop\keylogfile.txt
start firefox
MacOS:
export SSLKEYLOGFILE=$HOME/Desktop/keylogfile.txt
open -a firefox
Linux:
export SSLKEYLOGFILE=$HOME/Desktop/keylogfile.txt
firefox
注:使用脚本临时配置环境变量,防止忘记关闭,引发安全问题。
接下来,运行脚本,启动浏览器,访问HTTPS网站。
这时打开keylogfile.txt文件可以看到如下内容:
打开WireShark抓包,按某个网站的IP筛选数据包:
可以看到,HTTP的数据已经可以查看了,否则你只能看到TLS层:
参考:
https://wiki.wireshark.org/TLS#using-the-pre-master-secret