使用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数据分析的全过程。
- 上一篇 使用sed往文件里添加内容
- 下一篇 用nginx架设tls/sni服务(三)