使用Wireshark抓取/解码HTTPS数据包

Wireshark 的抓包是直接读取并分析网卡数据,要想让它解密 HTTPS 流量,有两个办法:

    1)如果你拥有 HTTPS 网站的加密私钥,可以用来解密这个网站的加密流量;

    2)某些浏览器支持将 TLS 会话中使用的对称密钥保存在外部文件中,可供 Wireshark 加密使用。

先来查看下第一种方法:

Tips:这里我用一个公司的域名和证书,使用本地的Hosts解析到内网一台Nginx服务器之上。

服务端Nginx配置:

cd /data/nginx/conf
vim vhosts/tempused.conf
# Nginx Second Configure File. 
# 测试Wireshark抓取固定站点HTTPS流量
server { 
    listen 80;
    listen 443 ssl;
    server_name shopc.xxxxx.com;
    ssl_certificate certs/xxxxx.com.pem;
    ssl_certificate_key certs/xxxxx.com.key;
    access_log logs/shopc_access.log;
    error_log logs/shopc_error.log;
  location / {
    root "/data/www";
  }
}
mkdir /data/www
echo '<h1>this is a test page!</h1>' > /data/www/index.html
systemctl reload nginx

客户端Host配置:

...
172.16.220.128 shopc.xxxxx.com

测试访问:

可以正常到达内网服务器。

此时Wireshark抓包查看:

可以看到,在SSL/TLS握手,密钥交换完成后,开始发送真实数据(Application Data),它们使用“协商”密钥进行加密通讯(大部分网站都会使用密钥交换技术生成临时随机的对称密钥来代替RSA非对称密钥进行数据通讯)。

故要想看到其内容,需使用第二种方法得到浏览器交互时生成的协商密钥进行解密。

故下面为展示设置,没有密钥交换情况下设置查看。

Wireshark设置:

右键点击进入TLS协议首选项中的RSA keys list

在其中添加对应的证书密钥:

想要获得数据包中TLS中的加密数据,需要系统和浏览器的配合。

首先打开“系统属性”选项卡:可以通过右键“我的电脑”——“属性”——“高级系统设置”打开;也可以通过在运行中输入“systempropertiesadvanced”打开。

然后添加环境变量SSLKEYLOGFILE:

变量值的文件路径可以自己设置。保存好之后,可以通过cmd命令行来查看其生效:

设置这个环境变量是因为:Firefox 和 Chrome浏览器会在系统环境变量中存在 SSLKEYLOGFILE 路径时生成该文件,以记录TLS 会话中使用的对称密钥。

注意:如果你的浏览器是以非管理员权限运行的,请将上述文件设置到有权限写入的目录中。

设置完成之后完全关闭并重新打开 Chrome 浏览器生效,可以看到所设置的路径下自动生成了记录文件:

Wireshark设置,同样进入TLS协议首选项,设置Pre-Master-Securet log file:

将文件路径设置为上面环境变量的路径:

之后,重新抓包并访问就可看到加密内容:

发表评论

error: Content is protected !!