3
我需要支持多個LDAP服務器。有些人可能會使用SSL。我能夠下載證書並將其添加到Java信任庫文件。在添加證書後,如果我立即嘗試使用SSL登錄,則登錄失敗。如果我重新啓動JVM,登錄工作正常。如何導入服務器證書並使其可用於驗證而無需重新啓動JVM?
這是正常的行爲?是否有任何解決方法可用於在不重新啓動JVM的情況下進行登錄?
我需要支持多個LDAP服務器。有些人可能會使用SSL。我能夠下載證書並將其添加到Java信任庫文件。在添加證書後,如果我立即嘗試使用SSL登錄,則登錄失敗。如果我重新啓動JVM,登錄工作正常。如何導入服務器證書並使其可用於驗證而無需重新啓動JVM?
這是正常的行爲?是否有任何解決方法可用於在不重新啓動JVM的情況下進行登錄?
創建自定義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;
}
這是一個問題,還是一個陳述? –
問題。我只想知道可能是什麼解決方案。 – Ganesh
這是一個非常好的問題,您是否設法找到解決方案? – sorin