Найдено два возможных решения. Сначала один я бы не использовать:
System.setProperty("javax.net.ssl.trustStore",path_to_your_cacerts_file);
второй я бы предпочел:
public class LDAPSSocketFactory extends SSLSocketFactory {
private SSLSocketFactory actualSocketFactory;
public LDAPSSocketFactory() {
InputStream certificateInputStream = this.getClass().getClassLoader().getResourceAsStream("yourcert.pfx");
try {
KeyStore pkcs12 = KeyStore.getInstance("pkcs12");
pkcs12.load(certificateInputStream, "".toCharArray());
TrustManagerFactory tmf = TrustManagerFactory.getInstance(TrustManagerFactory.getDefaultAlgorithm());
tmf.init(pkcs12);
SSLContext ctx = SSLContext.getInstance("TLS");
ctx.init(null, tmf.getTrustManagers(), null);
actualSocketFactory = ctx.getSocketFactory();
} catch (KeyStoreException e) {
e.printStackTrace();
} catch (CertificateException e) {
e.printStackTrace();
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} catch (KeyManagementException e) {
e.printStackTrace();
}
}
//Override methods by simply deligating them to the actualSocketFactory
}
И передать это как JNDI парам для Ldap соединений:
env.put("java.naming.ldap.factory.socket", "LDAPSSocketFactory");
Найдено всего из этого в StackOverflow, но я забыл, где именно, поэтому я в основном вложил их решение здесь.
Планируете ли вы использовать какой-либо сервис Wildfly, чтобы установить соединение? –
Нет, это не обязательно. Одного компонента достаточно. – PeteSabacker
Возможно, поместите свой сертификат в файл jar или что-то еще? То, что я получаю, это то, что я считаю, что для Java-клиента SSL требуется только параметр свойства для файла. Я не думаю, что он должен специально взаимодействовать с контейнером. Я не знаю, есть ли у контейнера «Trust Service», но я признаю, что я никогда не играл с этими файлами. –