解决 javax.net.ssl.SSLHandshakeException: java.security.cert.CertPathValidatorException: Trust anchor for certification path not found.问题
1. 首先创建一个类继承于此类
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; /** * Created by LiangCai on 2017/8/3 0003 11:38 . */ 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()); } }
2. 在请求网络的时候加上此方法即可使用假的证书跳过检测.
RequestQueue mQueue = Volley.newRequestQueue(MainActivity.this); FakeX509TrustManager.allowAllSSL(); StringRequest stringRequest = new StringRequest(Request.Method.GET, volleyGetUrl, new Response.Listener<String>() { @Override public void onResponse(String response) { try { JSONObject responseObject = new JSONObject(response); JSONObject dataObject = responseObject.optJSONObject("data"); String accessToken = dataObject.optString("access_token"); AuthorizeManager.getInstance().registerAccessToken(accessToken); String name = Md5Util.md5(appKey + userName); SpUtils.saveToLocal(MainActivity.this, name, "access_token", accessToken); Toast.makeText(MainActivity.this, "授权成功", Toast.LENGTH_SHORT).show(); } catch (JSONException e) { e.printStackTrace(); } } },
如果有用请点赞!!!!!!!!!!!!!