有的时候 我们android https 证书过期 ,或者使用明文等方式去访问服务器 可能会碰到类似的 问题 :

javax.net.ssl.SSLHandshakeException: Chain validation failed

java.security.cert.CertPathValidatorException: Response is unreliable: its validity interval is out-of-date

java.security.cert.CertPathValidatorException: Could not determine revocation status

所以我们 尝试使用一下方式解决 :

1) 忽略证书验证

TrustManager[] trustAllCerts = new TrustManager[] {
    new X509TrustManager() {
        public void checkClientTrusted(X509Certificate[] chain, String authType) {}
        public void checkServerTrusted(X509Certificate[] chain, String authType) {}
        public X509Certificate[] getAcceptedIssuers() {
            return new X509Certificate[0];
        }
    }
};

try {

   

HttpsURLConnection httpsURLConnection = (HttpsURLConnection) new URL("https://www.baidu.com").openConnection();

   SSLContext sslContext = SSLContext.getInstance("TLS");
   sslContext.init(null, trustAllCerts, new java.security.SecureRandom());
   httpsURLConnection .setSSLSocketFactory(sslContext.getSocketFactory());

  httpsURLConnection .setHostnameVerifier((hostname, session) -> true);

......

   
} catch (Exception e) {
    e.printStackTrace();
}

如果您希望允许整个应用程序使用不安全的 HTTP 连接,可以在应用程序的清单文件(AndroidManifest.xml)中添加以下标记:


<application

android:usesCleartextTraffic="true" ...>

...

</application>

更详细的可以去问 gpt

更多推荐