我試圖連接到使用Apache Commons HttpClient 3.1
一個安全的服務器在Java中安全的服務器。
問題是,每次應用程序連接,它拋出一個連接使用Apache Commons的HttpClient 3.1投擲ValidatorException
sun.security.validator.ValidatorException。
這裏是堆棧跟蹤:
javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException:PKIX路徑驗證 失敗:java.security.cert.CertPathValidatorException:名稱鏈接檢查失敗javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException:PKIX路徑驗證 失敗:java.security.cert.CertPathValidatorException:subject/issuer 名鏈接檢查在com.sun.net.ssl.internal.ssl.Alerts.getSSLException(Alerts.java:174) 在com.sun.net.ssl.internal.ssl.SSLSocketImpl.fatal(SSLSocketImpl.java失敗 :1611) 在com.sun.net.ssl.internal.ssl.Handshaker.fatalSE(Handshaker.java:187) 在com.sun.net.ssl.internal.ssl.Handshaker.fatalSE(Handshaker.java:181 ) at com.sun.net.ssl.internal.ssl.ClientHandshaker.serverCertificate(ClientHandshaker.java:1035) at com.sun.net.ssl.internal.ssl.ClientHandshaker.processMessage(ClientHandshaker.java:124) 在com.sun.net.ssl.internal.ssl.Handshaker.processLoop(Handshaker.java:516) 在com.sun.net.ssl.internal.ssl.Handshaker.process_record(Handshaker.java:454) 在COM .sun.net.ssl.interna lsss.SSLSocketImpl.readRecord(SSLSocketImpl.java:884) at com.sun.net.ssl.internal.ssl.SSLSocketImpl.performInitialHandshake(SSLSocketImpl.java:1112) at com.sun.net.ssl.internal。 ssl.SSLSocketImpl.writeRecord(SSLSocketImpl.java:623) at com.sun.net.ssl.internal.ssl.AppOutputStream.write(AppOutputStream.java:59) at java.io.BufferedOutputStream.flushBuffer(BufferedOutputStream.java: 65) 在java.io.BufferedOutputStream.flush(BufferedOutputStream.java:123) 在org.apache.commons.httpclient.methods.EntityEnclosingMethod.writeRequestBody(EntityEnclosingMethod.java:506) 在org.apache.commons.httpclient。 HttpMethodBase.writeRequest(HttpMethodBase.java:2114) 在org.apache.commons.httpclient.HttpMethodBase.execute(HttpMethodBase.java :1096) 在org.apache.commons.httpclient.HttpMethodDirector.executeWithRetry(HttpMethodDirector.java:398) 在org.apache.commons.httpclient.HttpMethodDirector.executeMethod(HttpMethodDirector.java:171) 在org.apache.commons .httpClient.HttpClient.executeMethod(HttpClient.java:397) at org.apache.commons.httpclient.HttpClient.executeMethod(HttpClient.java:323) at balanceschecker.connector.Connector.conn(Connector.java:27) 在balanceschecker.connector.Connector.RawPost(Connector.java:99) at balanceschecker.connector.Connector.Post(Connector.java:111) at balanceschecker.login.Login.Login(Login.java:87) at balanceschecker .Main.main(Main.java:21)引起:sun.security.validator.ValidatorExcep重刑:PKIX路徑驗證 失敗:java.security.cert.CertPathValidatorException:主題/發行人 名稱鏈接檢查在sun.security.validator.PKIXValidator.doValidate(PKIXValidator.java:251) 在sun.security.validator失敗 。 PKIXValidator。doValidate(PKIXValidator.java:234) 在sun.security.validator.PKIXValidator.engineValidate(PKIXValidator.java:158) 在sun.security.validator.Validator.validate(Validator.java:218) 在的com.sun。 net.ssl.internal.ssl.X509TrustManagerImpl.validate(X509TrustManagerImpl.java:126) at com.sun.net.ssl.internal.ssl.X509TrustManagerImpl.checkServerTrusted(X509TrustManagerImpl.java:209) at com.sun.net。 ssl.internal.ssl.X509TrustManagerImpl.checkServerTrusted(X509TrustManagerImpl.java:249) at com.sun.net.ssl.internal.ssl.ClientHandshaker.serverCertificate(ClientHandshaker.java:1014) ... 21 more引起:java .security.cert.CertPathValidatorException:主題/發行人名稱 鏈接檢查失敗 at sun.secu rity.provider.certpath.PKIXMasterCertPathValidator.validate(PKIXMasterCertPathValidator.java:139) 在sun.security.provider.certpath.PKIXCertPathValidator.doValidate(PKIXCertPathValidator.java:326) 在sun.security.provider.certpath.PKIXCertPathValidator.engineValidate( PKIXCertPathValidator.java:178) 在java.security.cert.CertPathValidator.validate(CertPathValidator.java:250) 在sun.security.validator.PKIXValidator.doValidate(PKIXValidator.java:246) ...... 28多個
赫雷什我使用的代碼(編輯和壓縮比特)
installAllTrustManager(); PostMethod post = new PostMethod(server_path); NameValuePair[] data = new NameValuePair { new NameValuePair("Username", username), new NameValuePair("Password", password) }; post.setRequestBody(data); post.getParams().setParameter(HttpMethodParams.RETRY_HANDLER, new DefaultHttpMethodRetryHandler(3, false)); try { HttpClient hc = new HttpClient(); int result2 = hc.executeMethod(post); if (result2 != HttpStatus.SC_OK) { throw new IOException("HTTP Status Not OK: " + result2); } return post.getResponseBodyAsStream(); } finally { post.releaseConnection(); }
我看了一下該網站的證書,他們仍然有效一年多。 然後我試圖繞過使用「How to bypass trusted host and certificate check in Java」中顯示的代碼的證書檢查,但是仍然拋出異常。
我在做什麼錯?
如何成功連接到服務器?