相关疑难解决方法(0)

Fiddler - 解密Android HttpsUrlConnection SSL流量

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

这是我的步骤

  1. 在PC上运行Fiddler(使用适当的设置:捕获HTTPS连接,解密HTTPS流量,允许远程计算机连接)
  2. 在Android设备上配置无线连接,通过运行fiddler的pc进行代理
  3. 从android设备打开浏览器到http:// [ip of pc fiddler]:8888并下载"FiddlerRoot证书".命名并安装它.
  4. 在Android浏览器中打开https://www.google.com并在PC上查看Fiddler中的解密流量.

以上工作.问题是非浏览器的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指向PC运行的小提琴手
    • 非root设备(Nexus 7 Android 4.2.2)使用内置的"修改网络"来指向PC运行的提琴手

android fiddler httpsurlconnection

20
推荐指数
1
解决办法
8168
查看次数

无法发送48681字节的消息来保护来自java的wcf服务

我必须使用相互身份验证从java调用安全的WCF服务.一切正常,但我无法发送大小超过48680字节的消息.因此,48680字节消息成功发送,但48681字节 - 不是,并且java应用程序因读取超时异常而失败,尽管WCF的配额设置允许更大的消息.

那可能是什么问题呢?


编辑

源代码:

package foo.bar;

import org.apache.commons.io.FileUtils;
import org.apache.commons.io.IOUtils;
import org.junit.Test;

import javax.net.ssl.*;
import java.io.*;
import java.net.URL;
import java.security.KeyStore;

public class ReadTimedOutTest {

    @Test
    public void testReadTimedOut() throws Exception {
        URL url = new URL("https://services/endpoint/");

        HttpsURLConnection connection = (HttpsURLConnection) url.openConnection();
        setUpSSL(connection);
        connection.setDoOutput(true);
        connection.setDoInput(true);
        connection.setRequestMethod("POST");
        connection.setRequestProperty("SOAPAction", "http://namespace/2012/01/service/Operation");
        connection.setRequestProperty("Accept", "*/*");
        connection.setRequestProperty("Connection", "Keep-Alive");
        connection.setRequestProperty("Content-Type", "text/xml; charset=utf-8");

        connection.setConnectTimeout(10 * 1000);
        connection.setReadTimeout(10 * 1000);
        connection.setInstanceFollowRedirects(true);

        ByteArrayOutputStream bos = new ByteArrayOutputStream();
        InputStream is = ReadTimedOutTest.class.getResourceAsStream("payload.failure.xml");
        try {
            IOUtils.copy(is, bos);
        } finally {
            is.close(); …
Run Code Online (Sandbox Code Playgroud)

java wcf

6
推荐指数
1
解决办法
1035
查看次数

标签 统计

android ×1

fiddler ×1

httpsurlconnection ×1

java ×1

wcf ×1