linux 上使用 wireshark 查看 https 请求的内容

第一步

 SSLKEYLOGFILE=$HOME/premaster.txt chromium-browser &>/dev/null &

在控制台中启动wireshark应用。

 wireshark &>/dev/null

第二步

打开Wireshark - Preferences - Protocols - SSL - (Pre)-Master-Secret log filename,设置前面命令行中的premaster.txt完整的路径。

第三步

  1. 启动wireshark抓包
  2. Chromium浏览器中访问链接:https://httpbin.org/get

第四步

  1. 查看$HOME/premaster.txt文件,正确的情况下里面应该会有内容,没有内容则说明浏览器不支持SSLKEYLOGFILE
  2. 在 wireshark 中的过滤查找此请求的数据包并Follow SSL stream,选中HTTP GET /get这个请求,查看Decrypted SSL Data标签,如图所示。

HTTPS RSA 握手过程简单说明

  1. [明文] 客户端发送随机数client_random和支持的加密方式列表
  2. [明文] 服务器返回随机数server_random,选择的加密方式和服务器证书链
  3. [RSA] 客户端验证服务器证书,使用证书中的公钥加密premaster secret发送给服务端
  4. 服务端使用私钥解密premaster secret
  5. 两端分别通过client_random,server_random 和premaster secret 生成master secret,用于对称加密后续通信内容

客户端和服务端在握手hello消息中明文交换了client_random和server_random,使用RSA公钥加密传输premaster secret,最后通过算法,客户端和服务端分别计算master secret。其中,不直接使用premaster secret的原因是:保证secret的随机性不受任意一方的影响。

References

  1. Decrypting TLS Browser Traffic With Wireshark
  2. Keyless SSL: The Nitty Gritty Technical Details
  3. HTTPS工作原理