今天在与后台服务器调试时,因为使用了https,在Android 6.0以上的手机上面连接正常,在Android 6.0以下的手机出现了下面的异常,导致连接服务器失败:

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

这是因为,在Android 6.0之后,Google 采用用BoringSSL 代替了OpenSSL ,所以导致6.0之前的系统和6.0之后的系统在使用https时出现了不一致的情况,经过网上资料查询之后,找到了一种靠谱的方案,虽然报错的信息不一样,但是原因是一样,亲测可用,分享给大家:

原文地址: https://blog.csdn.net/rnzuozuo/article/details/52314617

我是使用了Volley,可以在进行StringRequest之前设置一个X509TrustManager。

首先新建一个类FakeX509TrustManager:

import java.security.KeyManagementException; import java.security.NoSuchAlgorithmException; import java.security.SecureRandom; import java.security.cert.X509Certificate; import javax.net.ssl.HostnameVerifier; import javax.net.ssl.HttpsURLConnection; import javax.net.ssl.SSLContext; import javax.net.ssl.SSLSession; import javax.net.ssl.TrustManager; import javax.net.ssl.X509TrustManager; public class FakeX509TrustManager implements X509TrustManager { private static TrustManager[] trustManagers; private static final X509Certificate[] _AcceptedIssuers = new X509Certificate[] {}; @Override public void checkClientTrusted(java.security.cert.X509Certificate[] x509Certificates, String s) throws java.security.cert.CertificateException { //To change body of implemented methods use File | Settings | File Templates. @Override public void checkServerTrusted(java.security.cert.X509Certificate[] x509Certificates, String s) throws java.security.cert.CertificateException { //To change body of implemented methods use File | Settings | File Templates. public boolean isClientTrusted(X509Certificate[] chain) { return true; public boolean isServerTrusted(X509Certificate[] chain) { return true; @Override public X509Certificate[] getAcceptedIssuers() { return _AcceptedIssuers; public static void allowAllSSL() { HttpsURLConnection.setDefaultHostnameVerifier(new HostnameVerifier() { @Override public boolean verify(String arg0, SSLSession arg1) { // TODO Auto-generated method stub return true; SSLContext context = null; if (trustManagers == null) { trustManagers = new TrustManager[] { new FakeX509TrustManager() }; try { context = SSLContext.getInstance("TLS"); context.init(null, trustManagers, new SecureRandom()); } catch (NoSuchAlgorithmException e) { e.printStackTrace(); } catch (KeyManagementException e) { e.printStackTrace(); HttpsURLConnection.setDefaultSSLSocketFactory(context.getSocketFactory());

然后在进行StringRequest之前设置:

FakeX509TrustManager.allowAllSSL();
mStringRequest = new StringRequest(Request.Method.POST,
  getDefaultSuccessListener(),
  mErrorListener){
            @Override
            protected Map<String, String> getParams() throws AuthFailureError {
                return params;
mRequestQueue.add(mStringRequest);

再次运行则发现可以正常获取数据。

可以加一个判断,当android版本低于6.0的时候,才调用FakeX509TrustManager.allowAllSSL() 此方法。

今天在与后台服务器调试时,因为使用了https,在Android 6.0以上的手机上面连接正常,在Android 6.0以下的手机出现了下面的异常,导致连接服务器失败:com.android.volley.NoConnectionError: javax.net.ssl.SSLHandshakeException: java.security.cert.CertPathValidatorEx...
第一件事:定义一个RequestQueue。在实际开发中,这个对象应该写为一个 RequestQueue queue= Volley .newRequestQueue(this); 第二件事:定义一个Request 参数:请求类型(获取/上传)。网址/url。成功访问时的监听器。 失败 访问时的监听器。 StringRequest stringRequest = new StringRequest(int method, Listener<String> listener,@Nullable Er
Volley Android 开源的一个框架,于2013年在Google大会上发布。 Volley 是一个Http库,它 Android Apps执行网络操作更加方便,并且更加高效。在 Android 开源项目仓库中可以获得 Volley 源码:     clone https :// android .googlesource.com/platform/framework
在本文中,我们将讨论SSL 连接 错误的原因及解决方法。在此之前,我们需要对SSL证书有所了解。SSL对发送到Web的信息进行编码,从而防止第三方窃听。在这种情况下,只有具有私钥的接收者才能解密通信。 1、 Android 设备上SSL 连接 错误的原因: 1)系统中的时间可能无效。这意味着 Android 时间和浏览器时间不匹配; 2)防火墙可能阻止了网站和IP地址; 3)cookie和缓存没有及时清除; 4)网站 服务器 上可能错误地安装了传输层安全性(TSL)和安全套接字层(SSL); 2、 Android 上的
Android 客户端和 服务器 端通常通过网络协议进行交互。常用的网络协议有 HTTP、 HTTPS 和 WebSockets。客户端可以通过发送 HTTP 请求来请求 服务器 端的数据, 服务器 端可以通过返回 HTTP 响应来响应客户端的请求。 为了方便 Android 客户端与 服务器 端的交互,开发人员可以 使用 一些网络库,比如 Retrofit、 Volley 和 OkHttp。这些库可以帮助开发人员简化网络请求的代码,并且提供了许多有用的功能,比如缓存、自动重试和请求优先级。 关于在华为手机上出现java.lang.SecurityException: Call from user 0 as user 132606 without permission的问题解决 fenglichenglin: 太强了。搞了几天了,还好看到你。 Flutter系列之设置TabBar的tab紧凑排列 碗吐撕瑞: Column 你设置居中了吧 Android打包出现Out of memory: Java heap space的问题解决 sinat_34736910: 编译目录里有太多gradle.properties文件,该改哪一个?