2012-08-03 167 views
2

我正在嘗試編寫一個將由bat文件調用的獨立程序。我發現了像所有證書管理器一樣的信任。服務器拒絕Https連接

TrustManager[] trustAllCerts = new TrustManager[]{ 
     new X509TrustManager() { 
      public java.security.cert.X509Certificate[] getAcceptedIssuers() { 
       return null; 
      } 

      public void checkClientTrusted(
        java.security.cert.X509Certificate[] certs, String authType) { 
      } 

      public void checkServerTrusted(
        java.security.cert.X509Certificate[] certs, String authType) { 
      } 
     } 
    }; 

// Install the all-trusting trust manager 
     try { 
      SSLContext sc = SSLContext.getInstance("SSL"); 
      sc.init(null, trustAllCerts, new java.security.SecureRandom()); 
      HttpsURLConnection.setDefaultSSLSocketFactory(sc.getSocketFactory()); 

     URL url = new URL("--insert server url here--"); 
//url.openStream(); 
// URLConnection urlConnection = url.openConnection(); 
      HttpsURLConnection urlConnection = (HttpsURLConnection) url.openConnection(); 
} catch (MalformedURLException mfe) { 
      mfe.printStackTrace(); 
     } catch (Exception e) { 
      e.printStackTrace(); 
     } 
    } 

正常工作在我的IDE,但我建,並通過批處理文件運行後,它不斷給我這個錯誤

javax.net.ssl.SSLException: Server key 
     at sun.security.ssl.Handshaker.throwSSLException(Unknown Source) 
     at sun.security.ssl.ClientHandshaker.processMessage(Unknown Source) 
     at sun.security.ssl.Handshaker.processLoop(Unknown Source) 
     at sun.security.ssl.Handshaker.process_record(Unknown Source) 
     at sun.security.ssl.SSLSocketImpl.readRecord(Unknown Source) 
     at sun.security.ssl.SSLSocketImpl.performInitialHandshake(Unknown Source 
) 
     at sun.security.ssl.SSLSocketImpl.startHandshake(Unknown Source) 
     at sun.security.ssl.SSLSocketImpl.startHandshake(Unknown Source) 
     at sun.net.www.protocol.https.HttpsClient.afterConnect(Unknown Source) 
     at sun.net.www.protocol.https.AbstractDelegateHttpsURLConnection.connect 
(Unknown Source) 
     at sun.net.www.protocol.http.HttpURLConnection.getInputStream(Unknown So 
urce) 
     at java.net.HttpURLConnection.getResponseCode(Unknown Source) 
     at sun.net.www.protocol.https.HttpsURLConnectionImpl.getResponseCode(Unk 
nown Source) 
     at sss.Sss.main(Sss.java:65) 
Caused by: java.security.NoSuchAlgorithmException: NONEwithRSA Signature not ava 
ilable 
     at java.security.Signature.getInstance(Unknown Source) 
     at sun.security.ssl.JsseJce.getSignature(Unknown Source) 
     at sun.security.ssl.RSASignature.<init>(Unknown Source) 
     at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) 

     at sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source) 

     at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Sou 
rce) 
     at java.lang.reflect.Constructor.newInstance(Unknown Source) 
     at java.lang.Class.newInstance0(Unknown Source) 
     at java.lang.Class.newInstance(Unknown Source) 
     at java.security.Provider$Service.newInstance(Unknown Source) 
     at sun.security.jca.GetInstance.getInstance(Unknown Source) 
     at java.security.Signature.getInstance(Unknown Source) 
     at sun.security.ssl.JsseJce.getSignature(Unknown Source) 
     at sun.security.ssl.RSASignature.getInstance(Unknown Source) 
     at sun.security.ssl.HandshakeMessage$DH_ServerKeyExchange.<init>(Unknown 
Source) 
     ... 13 more 

我做錯了什麼?我應該簽署證書才能連接到服務器嗎?

回答

1

已經找到了上述問題的答案,需要將sunjce_provider.jar包含到獨立程序的lib文件夾中。