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

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

DDD
发布: 2024-12-10 16:25:12
原创
904 人浏览过

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中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板