我花了无数个小时试图通过Fiddler为HttpsUrlConnection解密Android SSL流量,但收效甚微.如何使用HttpsUrlConnection可靠地配置Fiddler来解密来自Android应用的SSL流量?
这是我的步骤
以上工作.问题是非浏览器的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.
总结一下
我必须使用相互身份验证从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)