如何使用Java连接到Ldap服务器?

时间:2018-11-20 10:01:24

标签: java ldap

请找到下面的代码,并帮助我连接到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

1 个答案:

答案 0 :(得分:0)

您对此发表评论:

  

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

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

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

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

           ldaps://192.168.0.214:636
    

    并使用SSL进行初始连接。

无论哪种情况,您都需要在密钥库中提供适当的密钥/证书。

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