我们的Wildfly 8.1服务器需要与组织网络中的服务器建立出站(!)LDAPS连接。此连接仅用于同步各种应用程序数据。不幸的是,没有关于Wildfly出站信任库的文档。我所做的每项研究都只给我有关启用入站连接SSL的结果。
请问我该如何为Wildfly的出站SSL连接添加证书?是否有相关文档?感谢您对此主题提供的任何帮助。
请问我该如何为Wildfly的出站SSL连接添加证书?是否有相关文档?感谢您对此主题提供的任何帮助。
我找到了两个可能的解决方案。首先是我不会使用的一个:
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上找到了以下所有内容,但我忘记了具体位置,所以我在这里粘贴了他们的解决方案。