我花了无数个小时试图通过 Fiddler 为 HttpsUrlConnection 解密 Android SSL 流量,但收效甚微。如何可靠地配置 Fiddler 以使用 HttpsUrlConnection 解密来自 Android 应用程序的 SSL 流量?
这是我的步骤
- 在 PC 上运行 Fiddler(使用适当的设置:捕获 HTTPS 连接、解密 HTTPS 流量、允许远程计算机连接)
- 在 Android 设备上配置无线连接以通过运行 fiddler 的 PC 进行代理
- 从 android 设备打开浏览器到http://[运行 fiddler 的电脑的 ip]:8888 并下载“FiddlerRoot 证书”。命名并安装它。
- 在安卓浏览器中打开https://www.google.com,在 PC 上查看 Fiddler 中的解密流量。
以上工作。问题是非浏览器 android 流量在 Fiddler 中显示为连接隧道。我最初的研究表明问题是由于证书是如何通过 HttpsUrlConnection 被信任的,所以我确保根据这篇文章https://secure.mcafee.com/us/resources/white-papers/wp-defeating-ssl信任所有证书-cert-validation.pdf
不幸的是,使用 HttpsUrlConnection 信任所有证书对我不起作用,所以我停止了调查。几天后,我决定再试一次,惊讶地发现 fiddler 流量正在为 HttpsUrlConnection 解密!不幸的是,我没有进行任何进一步的更改来解决这个问题,所以我不完全确定它为什么开始工作。它使用的设备是 LG-Optimus L9 Android 版本 4.0.4 并且已植根。
现在我正在尝试为 Nexus 7 Android 版本 4.2.2(未植根)配置它,但可惜我在提琴手中看到的只是连接隧道。由于两台设备上的证书具有相同的序列号,并且我正在测试的应用程序相同,我很难理解为什么我不能用另一台 Android 设备配置 Fiddler。
总结
- Fiddler 可以解密来自 LG Optimus 的 SSL 流量,但只显示来自 Nexus 7 的连接隧道
- 两台设备都运行同一个应用程序,该应用程序使用 HttpsUrlConnection 进行网络请求
- 两台设备都安装了相同的提琴手证书(序列匹配),并且没有安装其他用户证书。
- 不要认为这些很重要,但是...
- Rooted 设备 (LG Optimus Android 4.0.4) 使用 Proxy Droid 指向运行 fiddler 的 PC
- 非根设备(Nexus 7 Android 4.2.2)使用内置“修改网络”指向运行提琴手的 PC