Fiddler - 解密Android HttpsUrlConnection SSL流量

时间:2013-05-31 17:39:41

标签: android fiddler httpsurlconnection

我花了无数个小时试图通过Fiddler为HttpsUrlConnection解密Android SSL流量,但收效甚微。如何使用HttpsUrlConnection可靠地配置Fiddler解密来自Android应用的SSL流量?

以下是我的步骤

  1. 在PC上运行Fiddler(使用适当的设置:捕获HTTPS连接,解密HTTPS流量,允许远程计算机连接)
  2. 在Android设备上配置无线连接,以通过运行fiddler的电脑进行代理
  3. 从Android设备打开浏览器到运行fiddler的电脑的http://[ip:8888并下载“FiddlerRoot证书”。命名并安装它。
  4. 在Android浏览器中打开https://www.google.com并在PC上查看Fiddler中的解密流量。
  5. 以上作品。问题是非浏览器的Android流量在Fiddler中显示为连接隧道。我最初的研究表明问题是由于如何通过HttpsUrlConnection信任证书,所以我确保信任基于这篇文章的所有证书https://secure.mcafee.com/us/resources/white-papers/wp-defeating-ssl-cert-validation.pdf

    不幸的是,信任所有证书对我来说不适用于HttpsUrlConnection,所以我停止了调查。几天后,我决定再次尝试,并惊讶地发现正在为HttpsUrlConnection解密小提琴流量!不幸的是我没有做任何进一步的修改来解决这个问题所以我不能完全确定它为什么开始工作。它使用的设备是LG-Optimus L9 Android版本4.0.4并且已经扎根。

    现在我正在尝试为Nexus 7 Android版本4.2.2(未植根)配置此功能,但我在fiddler中看到的所有内容都是连接隧道。由于两个设备上的证书都具有相同的序列号,而我正在测试的应用程序是相同的,因此我难以理解为什么我无法使用其他Android设备配置Fiddler。

    总结

    • Fiddler可以解密来自LG Optimus的SSL流量,但仅显示来自Nexus 7的连接隧道
    • 两台设备都运行相同的应用程序,该应用程序使用HttpsUrlConnection进行网络请求
    • 两台设备都安装了相同的fiddler证书(序列号匹配),并且没有安装其他用户证书。
    • 不要认为这些事情,但......
      • Root设备(LG Optimus Android 4.0.4)使用Proxy Droid指向运行fiddler的PC
      • 非root设备(Nexus 7 Android 4.2.2)使用内置的“修改网络”指向PC运行的提琴手

3 个答案:

答案 0 :(得分:25)

我的研究表明,HttpsUrlConnection管道实现存在一个错误。

要解决问题,您需要在Fiddler中执行以下步骤:

  1. 在Fiddler中点击“规则 - >自定义规则”;

  2. 在打开的脚本中找到函数OnBeforeResponse

  3. 在函数体中添加以下代码:

    if (oSession.oRequest["User-Agent"].indexOf("Dalvik") > -1 && oSession.HTTPMethodIs("CONNECT")) {  
       oSession.oResponse.headers["Connection"] = "Keep-Alive";     
    } 
    
  4. 4.保存文件并重启Fiddler

答案 1 :(得分:1)

这是一种解决方法。

假设我发送https请求的主机名是myHostName.com,请将以下内容添加到Fiddler的CustomRules.js

if (!oSession.isHTTPS && !oSession.HTTPMethodIs("CONNECT") && (oSession.HostnameIs("myHostName"))
{
  oSession.oRequest.headers.UriScheme = "https";
}

然后在Android代码中更新网址以使用http而不是https。

现在,客户端将在没有SSL的情况下与Fiddler通信,并且所有请求/响应流量都将可见。

这种方法的明显缺点是必须在客户端修改URL才能使用http。我没有长时间使用这种方法来发现任何其他缺点。

答案 2 :(得分:0)

让设备生根是关键。至少在我的场景中。

我将LG Optimus Android 4.0.4无根,并升级到4.1.2。我试过fiddler将所有相同的步骤,但只有连接隧道显示。

我再次扎根了LG Optimus,立即通过fiddler看到了所有的请求/响应。

我认为生根N7会让它也能正常工作。