2015-04-12 94 views
0

我有一個REST API說https://testing.com/ap//v1/test/23123。 這是我的Java代碼:HTTPs HTTPURLConnection問題

URL restServiceURL = new URL(targetURL); 

Proxy proxy = new Proxy(Proxy.Type.HTTP, new InetSocketAddress("100.3.4.54", 9128)); 
HttpURLConnection httpConnection = (HttpURLConnection) restServiceURL.openConnection(proxy); 
httpConnection.setRequestMethod("GET"); 
httpConnection.setRequestProperty("Accept", "application/json"); 

if (httpConnection.getResponseCode() != 200) { 
    throw new RuntimeException("HTTP GET Request Failed with Error code : " 
      + httpConnection.getResponseCode()); 
} 

BufferedReader responseBuffer = new BufferedReader(new InputStreamReader(
     (httpConnection.getInputStream()))); 

這將引發Java異常:

javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: PKIX path validation failed: java.security.cert.CertPathValidatorException: CA key usage check failed: keyCertSign bit is not set 
at com.sun.net.ssl.internal.ssl.Alerts.getSSLException(Alerts.java:174) 
at com.sun.net.ssl.internal.ssl.SSLSocketImpl.fatal(SSLSocketImpl.java:1591) 
at com.sun.net.ssl.internal.ssl.Handshaker.fatalSE(Handshaker.java:187) 
at com.sun.net.ssl.internal.ssl.Handshaker.fatalSE(Handshaker.java:181) 
at com.sun.net.ssl.internal.ssl.ClientHandshaker.serverCertificate(ClientHandshaker.java:975) 
at com.sun.net.ssl.internal.ssl.ClientHandshaker.processMessage(ClientHandshaker.java:123) 
at com.sun.net.ssl.internal.ssl.Handshaker.processLoop(Handshaker.java:516) 
at com.sun.net.ssl.internal.ssl.Handshaker.process_record(Handshaker.java:454) 
at com.sun.net.ssl.internal.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:884) 
at com.sun.net.ssl.internal.ssl.SSLSocketImpl.performInitialHandshake(SSLSocketImpl.java:1096) 
at com.sun.net.ssl.internal.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1123) 

有什麼辦法繞過這個HTTPS驗證?解決這個問題的最好方法是什麼?

+0

服務器證書可能無效。請參閱[此線程](http://stackoverflow.com/questions/10267968/error-when-opening-https-url-keycertsign-bit-is-not-set)瞭解可能的解決方法。 –

+1

「有沒有什麼辦法可以繞過這個https驗證?」 :爲什麼你要使用https,如果你只是想擺脫它提供的保護?你不應該忽略一個安全問題,但要解決它。 –

回答

0

服務器證書無效。提供的簽名證書不是簽名證書,也就是說它沒有設置keyCertSign位。