解决证书信任问题:unable to find valid certification path to requested target

Dear 丶 2022-11-26 07:52 355阅读 0赞

简单粗暴,直接上代码。把下面这一段复制到你的代码中:

  1. HostnameVerifier hv = new HostnameVerifier() {
  2. public boolean verify(String urlHostName, SSLSession session) {
  3. System.out.println("Warning: URL Host: " + urlHostName + " vs. "
  4. + session.getPeerHost());
  5. return true;
  6. }
  7. };
  8. private static void trustAllHttpsCertificates() throws Exception {
  9. javax.net.ssl.TrustManager[] trustAllCerts = new javax.net.ssl.TrustManager[1];
  10. javax.net.ssl.TrustManager tm = new miTM();
  11. trustAllCerts[0] = tm;
  12. javax.net.ssl.SSLContext sc = javax.net.ssl.SSLContext
  13. .getInstance("SSL");
  14. sc.init(null, trustAllCerts, null);
  15. javax.net.ssl.HttpsURLConnection.setDefaultSSLSocketFactory(sc
  16. .getSocketFactory());
  17. }
  18. static class miTM implements javax.net.ssl.TrustManager,
  19. javax.net.ssl.X509TrustManager {
  20. public java.security.cert.X509Certificate[] getAcceptedIssuers() {
  21. return null;
  22. }
  23. public boolean isServerTrusted(
  24. java.security.cert.X509Certificate[] certs) {
  25. return true;
  26. }
  27. public boolean isClientTrusted(
  28. java.security.cert.X509Certificate[] certs) {
  29. return true;
  30. }
  31. public void checkServerTrusted(
  32. java.security.cert.X509Certificate[] certs, String authType)
  33. throws java.security.cert.CertificateException {
  34. return;
  35. }
  36. public void checkClientTrusted(
  37. java.security.cert.X509Certificate[] certs, String authType)
  38. throws java.security.cert.CertificateException {
  39. return;
  40. }
  41. }

然后,在发起请求前,再加上这两行代码:

  1. trustAllHttpsCertificates();
  2. HttpsURLConnection.setDefaultHostnameVerifier(hv);

发表评论

表情:
评论列表 (有 0 条评论,355人围观)

还没有评论,来说两句吧...

相关阅读