【问题标题】:CertPathValidatorException: Trust anchor for certification path not found when using Fiddler as proxy in AndroidCertPathValidatorException:在 Android 中使用 Fiddler 作为代理时找不到证书路径的信任锚
【发布时间】:2016-11-16 04:36:51
【问题描述】:

按照我的previous question(如果您有想法,仍然没有答案...),我尝试在 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 浏览器行为(在标题和帖子参数方面)自动化登录过程。我设法在 PC 上使用本机 Java 应用程序来做到这一点,但完全相同的代码在 Android 上的某些请求中返回 400(可能是因为与 Oracle SDK 相比,Android 中的HttpUrlConnection 类实现完全不同),所以我想捕获传出流量并找出差异。我成功地收到了从我的 PC 发送的请求,现在正在使用 Android。

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

我也在两台设备上试过,其中一台已经root了,没用。

任何帮助将不胜感激!

一些代码:

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

【问题讨论】:

    标签: android ssl proxy fiddler httpsurlconnection


    【解决方案1】:

    可能是 Fiddler 根证书没有正确安装。要验证尝试从设备浏览器捕获 Fiddler HTTPS 流量。如果它不起作用,这里有大量关于自定义 CA 故障排除的信息 - How to install trusted CA certificate on Android device?

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

    【讨论】:

    • 在我遵循的指南之一中,它说“它会要求您为证书选择一个名称......当它询问将其应用于什么时,'VPN 和应用程序'或 WiFi,选择 WiFi”。但是,在选择WiFi时,未添加证书。使用其他选项可以,但例外仍然存在。您认为这可能相关吗?
    猜你喜欢
    • 2015-05-30
    • 2017-10-03
    • 1970-01-01
    • 2014-12-15
    • 2021-03-18
    • 1970-01-01
    • 2015-04-17
    • 2021-02-10
    相关资源
    最近更新 更多