我正在尝试使用证书与我的OpenLDAP服务器建立连接。这是我的代码:
// Set up environment for creating initial context
Hashtable env = new Hashtable(11);
env.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.ldap.LdapCtxFactory");
// Must use the name of the server that is found in its certificate
env.put(Context.PROVIDER_URL, "ldap://ldap.url");
env.put(Context.SECURITY_AUTHENTICATION, "EXTERNAL");
LdapContextSource ldapContextSource = new LdapContextSource();
ldapContextSource.setBaseEnvironmentProperties(env);
LdapTemplate ldapTemplate = new LdapTemplate(ldapContextSource);
// Request all users
log.info(ldapUserRepo.testCtx(ldapTemplate).toString());
代码的最后一行基本上使用ldapTemplate请求所有用户。在将身份验证内容添加到LDAP服务器之前,此方法有效。然后代码记录此错误:
LDAP:错误代码7-SASL(-4):无可用的机制
我知道此错误是因为我们没有使用TLS,因为只有在我忘记在ldapsearch命令中输入-Z时,才会出现此错误。我不是安全人员,还是Java的新手,但是我假设我缺少某种使用TLS的配置?
这可能无法解决您的问题。但是我认为最好在您的上下文中将security_protocol指定为ssl ...
env.put(Context.SECURITY_PROTOCOL, "ssl");