错误log:

  1. javax.net.ssl.SSLHandshakeException: java.security.cert.CertPathValidatorException: Trust anchor for certification path

  2.  
  3. not found.

  4. at org.apache.harmony.xnet.provider.jsse.OpenSSLSocketImpl.startHandshake(OpenSSLSocketImpl.java:413)

  5. at org.apache.harmony.xnet.provider.jsse.OpenSSLSocketImpl.startHandshake(OpenSSLSocketImpl.java:257)

  6. at libcore.net.http.HttpConnection.setupSecureSocket(HttpConnection.java:210)

  7. at libcore.net.http.HttpsURLConnectionImpl$HttpsEngine.makeSslConnection(HttpsURLConnectionImpl.java:477)

  8. at libcore.net.http.HttpsURLConnectionImpl$HttpsEngine.connect(HttpsURLConnectionImpl.java:432)

  9. at libcore.net.http.HttpEngine.sendSocketRequest(HttpEngine.java:282)

  10. at libcore.net.http.HttpEngine.sendRequest(HttpEngine.java:232)

  11. at libcore.net.http.HttpURLConnectionImpl.connect(HttpURLConnectionImpl.java:80)

  12. at libcore.net.http.HttpsURLConnectionImpl.connect(HttpsURLConnectionImpl.java:164)

  13. at com.etnet.global.ConnectionTool.post(ConnectionTool.java:462)

  14. at com.etnet.android.Welcome$3.run(Welcome.java:177)

  15. Caused by: java.security.cert.CertificateException: java.security.cert.CertPathValidatorException: Trust anchor for

  16.  
  17. certification path not found.

  18. at org.apache.harmony.xnet.provider.jsse.TrustManagerImpl.checkTrusted(TrustManagerImpl.java:184)

  19. at org.apache.harmony.xnet.provider.jsse.TrustManagerImpl.checkServerTrusted(TrustManagerImpl.java:163)

  20. at org.apache.harmony.xnet.provider.jsse.OpenSSLSocketImpl.verifyCertificateChain(OpenSSLSocketImpl.java:593)

  21. at org.apache.harmony.xnet.provider.jsse.NativeCrypto.SSL_do_handshake(Native Method)

  22. at org.apache.harmony.xnet.provider.jsse.OpenSSLSocketImpl.startHandshake(OpenSSLSocketImpl.java:410)

  23. ... 10 more


解决方法:忽略证书验证:

  1. public static StringBuffer post(String urlString, String param) {

  2. StringBuffer sb = new StringBuffer();

  3. URL url = null;

  4. HttpURLConnection connection = null;

  5. DataOutputStream out = null;

  6. BufferedReader in = null;

  7. try {

  8. url = new URL(urlString);

  9.  
  10. //关键代码

  11. //ignore https certificate validation |忽略 https 证书验证

  12. if (url.getProtocol().toUpperCase().equals("HTTPS")) {

  13. trustAllHosts();

  14. HttpsURLConnection https = (HttpsURLConnection) url

  15. .openConnection();

  16. https.setHostnameVerifier(HttpIgnoreSSL.DO_NOT_VERIFY);

  17. connection = https;

  18. } else {

  19. connection = (HttpURLConnection) url.openConnection();

  20. }

  21.  
  22. connection.setReadTimeout(10000);

  23. connection.setDoInput(true);

  24. connection.setDoOutput(true);

  25. connection.setRequestMethod("POST");

  26. connection.setUseCaches(false);

  27. connection.setInstanceFollowRedirects(true);

  28. connection.setRequestProperty("Content-Type",

  29. "application/x-www-form-urlencoded");

  30. connection.connect();

  31. out = new DataOutputStream(

  32. connection.getOutputStream());

  33. out.writeBytes(param);

  34. out.flush();

  35.  
  36. in = new BufferedReader(new InputStreamReader(

  37. connection.getInputStream()), 512);

  38. String line;

  39. while ((line = in.readLine()) != null) {

  40. sb.append(line.trim());

  41. }

  42. } catch (IOException e) {

  43. e.printStackTrace();

  44. } catch (Exception e) {

  45. e.printStackTrace();

  46. }finally {

  47. if (out != null) {

  48. try {

  49. out.close();

  50. } catch (IOException e) {

  51. }

  52. }

  53. if (in != null) {

  54. try {

  55. in.close();

  56. } catch (IOException e) {

  57. }

  58. }

  59. if (connection != null) {

  60. connection.disconnect();

  61. }

  62. }

  63. return sb;

  64. }

 

  1. public static void trustAllHosts() {

  2. // Create a trust manager that does not validate certificate chains

  3. // Android use X509 cert

  4. TrustManager[] trustAllCerts = new TrustManager[] { new X509TrustManager() {

  5. public java.security.cert.X509Certificate[] getAcceptedIssuers() {

  6. return new java.security.cert.X509Certificate[] {};

  7. }

  8.  
  9. public void checkClientTrusted(X509Certificate[] chain,

  10. String authType) throws CertificateException {

  11. }

  12.  
  13. public void checkServerTrusted(X509Certificate[] chain,

  14. String authType) throws CertificateException {

  15. }

  16. } };

  17.  
  18. // Install the all-trusting trust manager

  19. try {

  20. SSLContext sc = SSLContext.getInstance("TLS");

  21. sc.init(null, trustAllCerts, new java.security.SecureRandom());

  22. HttpsURLConnection

  23. .setDefaultSSLSocketFactory(sc.getSocketFactory());

  24. } catch (Exception e) {

  25. e.printStackTrace();

  26. }

  27. }

  28.  

  29. public final static HostnameVerifier DO_NOT_VERIFY = new HostnameVerifier() {

  30. public boolean verify(String hostname, SSLSession session) {

  31. return true;

  32. }

  33. };

Logo

讨论HarmonyOS开发技术,专注于API与组件、DevEco Studio、测试、元服务和应用上架分发等。

更多推荐