2011-10-25 23 views
3

我需要支持多個LDAP服務器。有些人可能會使用SSL。我能夠下載證書並將其添加到Java信任庫文件。在添加證書後,如果我立即嘗試使用SSL登錄,則登錄失敗。如果我重新啓動JVM,登錄工作正常。如何導入服務器證書並使其可用於驗證而無需重新啓動JVM?

這是正常的行爲?是否有任何解決方法可用於在不重新啓動JVM的情況下進行登錄?

+5

這是一個問題,還是一個陳述? –

+0

問題。我只想知道可能是什麼解決方案。 – Ganesh

+0

這是一個非常好的問題,您是否設法找到解決方案? – sorin

回答

0

創建自定義SSLContext,然後創建SSLContext.getSocketFactory()。

public static SSLContext createSSLContext(Certificate ca, PrivateKey key, Certificate[] chain) 
     KeyStore keyStore = KeyStore.getInstance("JCEKS"); 
     char[] pwd = new char[1]; 
     keyStore.load(null, pwd); 
     if (key != null && chain != null) { 
      keyStore.setKeyEntry("key", key, pwd, chain); 
     } 
     if (ca != null) { 
      keyStore.setCertificateEntry("cert", ca); 
     } 

     SSLContext sc = SSLContext.getInstance("SSL"); 

     KeyManagerFactory keyManagerFactory = KeyManagerFactory.getInstance(KeyManagerFactory.getDefaultAlgorithm()); 
     keyManagerFactory.init(keyStore, pwd); 

     TrustManagerFactory trustManagerFactory = TrustManagerFactory.getInstance(TrustManagerFactory.getDefaultAlgorithm()); 
     trustManagerFactory.init(keyStore); 

     sc.init(key != null ? keyManagerFactory.getKeyManagers() : null, 
       ca != null ? trustManagerFactory.getTrustManagers() : null, 
       null); 
     return sc; 
} 
相關問題