1

我为 Android 模拟器设置了 Fiddler2,它可以工作,我可以通过 Android 浏览器查看 HTTPS 流量,但我无法使用 HttpsURLConnection 使用我的代码连接到 HTTPS 服务器:

    // use Fiddler's proxy:
    Proxy proxy = new Proxy(Proxy.Type.HTTP, new InetSocketAddress("172.16.4.20", 8888));
    HttpsURLConnection connection = (HttpsURLConnection) new URL(url)
            .openConnection(proxy);

    connection.setRequestMethod(method);
    connection.setRequestProperty("Content-Type", contentType);
    connection.setDoInput(true);
    connection.setDoOutput(true);
    OutputStream out = connection.getOutputStream();

我有:

java.net.SocketException: Socket is closed

在 Fiddler 中我可以看到第一个请求(我删除了主机地址)

CONNECT [address]:443 HTTP/1.1
Host: [address] 
User-Agent: Dalvik/1.6.0 (Linux; U; Android 4.0.4; Android SDK built for x86 Build/IMM76D)
Connection: Keep-Alive

After the client received notice of the established CONNECT, it failed to send any data.

回复:

HTTP/1.1 200 Connection Established
FiddlerGateway: Direct
StartTime: 12:32:18.567
Connection: close

上述请求响应对就像任何其他 Android 浏览器 HTTPS 连接建立一样。

之后我无法发送我的 POST 请求(因为我得到了 SocketException)。没有代理它可以工作。

4

3 回答 3

0

最可能的解释是客户端正在关闭连接,因为它对 Fiddler 的 HTTPS 解密证书不满意。您是否已将设备配置为信任 FiddlerRoot.cer 证书文件?您是否已将事件处理程序附加到您的 HttpsURLConnection 以接受 Fiddler 的自签名证书?

于 2013-04-16T16:24:17.657 回答
0

原因可能是应用程序使用了证书固定。它不信任设备“信任库”中的任何证书,而是配置为仅信任特定证书(由服务器签名)。

因此,当 Fiddler 提供自己的证书时,客户端会引发错误。

更多详情:https ://security.stackexchange.com/questions/29988/what-is-certificate-pinning

于 2014-10-27T14:17:04.133 回答
0

我在我的 iPhone 上遇到了同样的问题。
我所做的是从您的移动设备(在您的情况下为您模拟的 Android 设备)访问此 url
ht_tp(remove the under score)://(replace_with_the_ip_of_the_host_where_fiddler_is_running):8888
然后您将看到此链接上描述的网页 单击此
您需要安装证书。之后,您将在 fiddler 中显示响应。

享受!

于 2013-08-14T05:39:01.517 回答