使用wireshark对https通信进行数据捕获(下)

本文的下篇使用wireshark对https通信进行抓包和协议分析。

首先要准备一个https的服务器,我们可以使用已经做好的一个基于nginx的容器:

手工下载并启动这个容器比较麻烦,可以直接找到对应的开源项目:

把项目clone下来,然后按项目里的README文档说明启动容器:

$ docker-compose pull
$ docker-compose up

容器启动以后,使用docker命令查看容易运行状态:

$ docker ps

可以看到容器的443端口映射到了host的443端口。然后在host这边,按本文上篇介绍的方法,把SSLKEYLOGFILE设置好:

$ export SSLKEYLOGFILE=/tmp/sslkey.log

然后访问一下容器的服务:

$ curl -v -k https://localhost

以下是请求过程:

完成一次请求后,看看sslkey.log是否生成了:

$ ls /tmp/sslkey.log
/tmp/sslkey.log
$

可以看到curl生成了设置的sslkey.log文件。接下来把wireshark启动,并设置capture的接口为loopback

此时我们点开wireshark的preferences页面:

然后点击Protocols

然后选择Protocols下面的TLS,并且把sslkey.log设置加载:

这样,wireshark就会使用里面的session keys了。设置完成后,我们保存配置,然后在抓包页面的filter里面,过滤出来所有的ssl相关的数据包:

此时我们重新执行curl命令访问容器的https服务,就可以看到wireshark抓取的相关数据包了:

在上面抓取的数据包里,值得注意的是两条http数据:

可以看到,此时wireshark已经能够正确解码加密的http通信数据了。这是因为wireshark使用了curl输出到sslkey.log的session key,所以能够正确解码加密后的通信数据了。

如果我们清空wireshark的logfile的设置:

再看抓取的数据:

可以看到wireshark已经无法解码通信数据了,因为它没有session key,所以无法对数据进行解密。

以上就是使用wireshark进行https数据分析的全过程。

Powered by Jekyll and Theme by solid