【问题标题】:How to connect to Ldap server using java?如何使用 java 连接到 Ldap 服务器?
【发布时间】:2018-11-20 10:01:23
【问题描述】:

请找到我的以下代码并帮助我连接到 LDAP。

我的代码如下:

 Hashtable<String, String> environment = new Hashtable<String, String>();
 environment.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.ldap.LdapCtxFactory");
 environment.put(Context.PROVIDER_URL, "ldap://192.168.0.214:389");
 environment.put(Context.SECURITY_AUTHENTICATION, "simple");
 environment.put(Context.SECURITY_PRINCIPAL, "CN=Administrator,CN=Users,DC=estsecondary,DC=com");
 environment.put(Context.SECURITY_CREDENTIALS, "*****8");
 try {
     LdapContext ctx = new InitialLdapContext(environment, null); 
 }catch (AuthenticationNotSupportedException exception) {
     System.out.println("The authentication is not supported by the server");
 } catch (AuthenticationException exception){
     System.out.println("Incorrect password or username");
 }catch (NamingException exception){
     System.out.println("Error when trying to create the context");
 }

但我无法连接。我收到“服务器不支持身份验证”。请在下面找到我的 LDAP 结构。

enter image description here

【问题讨论】:

  • 您能否包含您在第 12 行捕获的异常的堆栈跟踪?
  • 服务器好像不支持认证类型。存在三种身份验证类型,包括“无”。以下是有关身份验证类型的更多信息:docs.oracle.com/javase/tutorial/jndi/ldap/auth_mechs.html
  • 服务器不支持身份验证[LDAP:错误代码 8 - BindSimple:需要传输加密。]
  • 可以添加e.printStackTrace(); before System.out.println("服务器不支持认证");并共享错误堆栈?

标签: java ldap


【解决方案1】:

您对此发表评论:

服务器不支持身份验证[LDAP:错误代码 8 - BindSimple:需要传输加密。]

我认为这是异常消息。它告诉您连接已被拒绝,因为您试图通过未加密的连接发送 BindSimple 身份验证凭据。

  • 您正在使用端口 386,这是(默认情况下)非 SSL 端口。如果你想使用这个端口,你可以告诉 JNDI 在你尝试认证之前进行 TLS 协商。 JNDI documentation中有一些example code

  • 另一种选择可能是将 URL 更改为

           ldaps://192.168.0.214:636
    

    并使用 SSL 进行初始连接。

在任何一种情况下,您都需要在密钥库中提供适当的密钥/证书。

最后一种选择是将 LDAP 服务器配置为通过不安全的连接接受 BindSimple 凭据。但那是……不安全……这样做可能会使您的基础设施面临风险。不要。

【讨论】:

    猜你喜欢
    • 2015-11-06
    • 2013-03-26
    • 2011-01-12
    • 2020-01-12
    • 1970-01-01
    • 1970-01-01
    • 2012-12-24
    • 1970-01-01
    相关资源
    最近更新 更多