首页 >Java >java教程 >在 Android 上建立 HTTPS 连接时如何绕过不受信任的服务器证书?

在 Android 上建立 HTTPS 连接时如何绕过不受信任的服务器证书?

DDD
DDD原创
2024-12-10 16:25:12908浏览

How to Bypass Untrusted Server Certificates When Establishing HTTPS Connections on Android?

Android 上的 HTTPS 连接建立

尝试在 Android 上建立 HTTPS 连接时,开发者可能会遇到与不受信任的服务器证书相关的异常。为了解决这个问题,可以考虑接受服务器证书。

信任所有主机

绕过证书验证的一种方法是信任所有主机,从而有效地禁用检查。这可以通过实现自定义 HostnameVerifier 和 TrustManager 来实现。

// Hostname verifier that always returns true
HostnameVerifier DO_NOT_VERIFY = new HostnameVerifier() {
    @Override
    public boolean verify(String hostname, SSLSession session) {
        return true;
    }
};

// Trust manager that accepts all certificates
TrustManager[] trustAllCerts = new TrustManager[]{
    new X509TrustManager() {
        @Override
        public X509Certificate[] getAcceptedIssuers() {
            return new X509Certificate[]{};
        }

        @Override
        public void checkClientTrusted(X509Certificate[] chain, String authType) {}

        @Override
        public void checkServerTrusted(X509Certificate[] chain, String authType) {}
    }
};

接下来,初始化 SSLContext 并应用信任管理器和主机名验证器。

SSLContext sc = SSLContext.getInstance("TLS");
sc.init(null, trustAllCerts, new SecureRandom());
HttpsURLConnection.setDefaultSSLSocketFactory(sc.getSocketFactory());

示例用法

创建 HTTP 连接时,检查协议,如果是则应用上述配置HTTPS。

HttpURLConnection http = null;
String url = "https://example.com";

if (url.toLowerCase().equals("https")) {
    trustAllHosts();
    HttpsURLConnection https = (HttpsURLConnection) url.openConnection();
    https.setHostnameVerifier(DO_NOT_VERIFY);
    http = https;
} else {
    http = (HttpURLConnection) url.openConnection();
}

以上是在 Android 上建立 HTTPS 连接时如何绕过不受信任的服务器证书?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn