我们日常用https访问网站的时候,和网站交互的数据是加密的,所用的协议就是SSL/TLS。所以即使我们截获了这些数据包,我们也不能看到加密的内容。
比如我们随便打开百度的网址,用wireshark抓一下https的数据包。
首先获取百度服务器地址:
开始抓包:
注意到通信的数据都是以二进制的形式表现出来的:
那我们怎么才能获得明文信息呢?
SSL采用的是对称加密和非对称加密相结合的方式进行通信。加密数据的过程是对称加密,也就是客户端和服务器的报文都是由一把钥匙进行加密的。那么只要我们能获取到这把钥匙,就能对上面的报文进行解密。
chrome和Firefox浏览器都可以记录这个密钥,前提是需要设置系统的环境变量SSLKEYLOGFILE,当用chrome和Firefox浏览器访问网页的时候,浏览器会检查这个环境变量,存在的话会向指定的文件里写入这个密钥。
配置环境变量:
可以看到文件里被写入了很多密钥信息:
在wireshark中进入进入首选项
选择协议TLS或者SSL,将pre-master-secret log设置为记录密钥的log路径
点击确认后,就能对TLS流量进行解密了: