CertPathValidatorException:在 Android 中使用 Fiddler 作为代理时找不到证书路



按照我之前的问题(如果你有一个想法,它仍然没有答案......),我试图在Java代码中显式设置代理。执行此操作时,我终于在 Fiddler 中看到请求隧道 ( A SSLv3-compatible ClientHello handshake was found... ),但仍然没有看到请求本身。但是,不是我在不使用代理时收到的响应 200,而是抛出以下错误:

javax.net.ssl.SSLHandshakeException: java.security.cert.CertPathValidatorException: Trust anchor for certification path not found.

简而言之,我的主要目标是通过模拟Web浏览器行为(在标头和post参数方面)来自动化登录过程。我设法在PC上使用本机Java应用程序来做到这一点,但是完全相同的代码在Android上的某些请求中返回400(可能是因为与Oracle SDK相比,Android中的HttpUrlConnection类实现完全不同),因此我想捕获传出流量并找到差异。我成功地收到了从我的PC发送的请求,现在正在努力使用Android。

成功捕获Android设备浏览器请求,问题仅发生在应用程序(特别是我的应用程序)上。我在设备上安装了提琴手证书,并根据需要设置了WiFi代理。

我也在两台设备上尝试过,其中一台是植根的,但无济于事。

任何帮助将不胜感激!

一些代码:

Proxy proxy = new Proxy(Proxy.Type.HTTP, new InetSocketAddress("192.168.0.120", 8888)); //My PC IP on local LAN
conn = (HttpsURLConnection) url.openConnection(proxy);
conn.setRequestMethod("GET");
conn.setUseCaches(false);
conn.setRequestProperty(...)               //Repeating thie line to add headers
int responseCode = conn.getResponseCode(); //Exception is thrown in this line

可能是 Fiddler 根证书没有正确安装。要验证是否尝试从设备浏览器捕获 Fiddler HTTPS 流量。如果它不起作用,这里有大量关于对自定义 CA 进行故障排除的信息 - 如何在 Android 设备上安装受信任的 CA 证书?

另一种方法是设置连接以编程方式信任 Fiddler CA。创建一个包含 Fiddler 根 CA 的自定义密钥库,并使用该密钥库初始化 TrustManager。然后使用 TrustManager 初始化 SSLContext,并使用 SSLContext 提供的 SSLSocketFactory 和 HttpsURLConnection。

最新更新