gpt4 book ai didi

java - 如何通过 JAVA 连接 LDAP 和 TLS

转载 作者:太空宇宙 更新时间:2023-11-03 14:35:34 25 4
gpt4 key购买 nike

当我尝试连接启用了 TLS 的 LDAP 服务器时,失败并出现以下异常。我的 my-ca.crt 文件有什么问题吗?

public class LdapTest {

public static void main (String[] args) throws Exception {
LdapTest test = new LdapTest();
test.tryit();
System.out.println("Test End.");
}

public void tryit() throws Exception {
Hashtable<String, String> env = new Hashtable<String, String>();
env.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.ldap.LdapCtxFactory");
env.put(Context.PROVIDER_URL, "ldaps://xxx.xxx.xxx.xxx");
env.put(Context.SECURITY_AUTHENTICATION, "simple");
env.put(Context.REFERRAL,"ignore");
env.put(Context.SECURITY_PROTOCOL,"ssl");
String keystore = "/Users/dummy/Downloads/my-ca.crt";
System.setProperty("javax.net.ssl.trustStore", keystore);

DirContext ctx = null;
try {
ctx = new InitialDirContext(env);
SearchControls sc = new SearchControls();
sc.setSearchScope(SearchControls.SUBTREE_SCOPE);

NamingEnumeration<SearchResult> results = ctx.search("cn=Directory Manager", "objectClass=*", sc);
while (results.hasMore()) {
SearchResult searchResult = results.next();
System.out.println("----------" + searchResult.toString() + "---------");
}
} catch (javax.naming.AuthenticationException e) {
e.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
} finally {
if (ctx != null) {
try {
ctx.close();
} catch (NamingException e) {
// ignore
}
}
}
}
}

The exception

此外,我可以使用具有以下设置的虚拟 DummySSLSocketFactory 连接到我的 LDAP 服务器:

env.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.ldap.LdapCtxFactory");
env.put(Context.PROVIDER_URL, "ldaps://xxx.xxx.xxx.xxx");
env.put(Context.SECURITY_AUTHENTICATION, "simple");
env.put(Context.REFERRAL,"ignore");
env.put(Context.SECURITY_PROTOCOL,"ssl");
env.put("java.naming.ldap.factory.socket", "com.test.ldap.DummySSLSocketFactory");

最佳答案

我已经按照以下步骤解决了这个问题

Keytool -import -alias certificatekey -file my-ca.crt -keystore my-ca.jks

在 Java 代码中使用 'my-ca.jks' 而不是 'my-ca.crt',然后我可以成功连接到我的 ldap 服务器。

String keystore = "/Users/dummy/Downloads/my-ca.jks";
System.setProperty("javax.net.ssl.trustStore", keystore);

关于java - 如何通过 JAVA 连接 LDAP 和 TLS,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48256117/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com