javax.naming.CommunicationException:简单绑定失败

当尝试使用简单的LDAP应用程序连接到LDAP服务器时,我收到一条错误,其中显示“简单绑定失败”。 我假设这与某种BIND有关。 我在其中一个属性文件中有一个绑定属性用于不同的应用程序,但我不知道如何将该属性传递给该程序。

我是否需要添加更多详细信息?

import javax.naming.directory.*; import javax.naming.*; import java.util.Vector; import java.util.Enumeration; import java.util.Properties; public class SearchLDAP { public static void main(String[] args) { String base = ""; String filter = "(objectclass=*)"; Properties env = new Properties(); env.put(DirContext.INITIAL_CONTEXT_FACTORY,"com.sun.jndi.ldap.LdapCtxFactory"); env.put(DirContext.PROVIDER_URL,"ldaps://misguided.com.au:343"); try { System.out.println("11"); DirContext dc = new InitialDirContext(env); System.out.println("22"); SearchControls sc = new SearchControls(); sc.setSearchScope(SearchControls.OBJECT_SCOPE); NamingEnumeration ne = null; ne = dc.search(base, filter, sc); while (ne.hasMore()) { SearchResult sr = (SearchResult) ne.next(); System.out.println(sr.toString()+"\n"); } dc.close(); } catch (NamingException nex) { System.err.println("Error: " + nex.getMessage()); nex.printStackTrace(); } } } 

我得到的错误是

错误

 11 Error: simple bind failed: XXXX.XXX.XXXX.net:808 javax.naming.CommunicationException: simple bind failed: misguided.com.au:343 [Root exception is javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target] at com.sun.jndi.ldap.LdapClient.authenticate(LdapClient.java:215) at com.sun.jndi.ldap.LdapCtx.connect(LdapCtx.java:2740) at com.sun.jndi.ldap.LdapCtx.(LdapCtx.java:316) at com.sun.jndi.ldap.LdapCtxFactory.getUsingURL(LdapCtxFactory.java:193) 

这个问题现在有点老了但很常见。 试图简要解释一下:

由于JRE密钥库中缺少SSL证书,因此会出现此问题。

对于LDAPS或HTTPS连接,Java运行时需要使用相应的SSL证书来创建与另一端的服务器的安全连接。

要从其密钥库中获取SSL证书,应首先将证书安装在Java密钥库中。 ‘keytool’命令有助于从Java Keystore导入/导出证书。

 keytool –import -file adserv.crt -keystore  

当它失踪时,你得到一个:

 "sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target". 

因此,您需要做的就是在建立安全连接之前安装证书。

您正在尝试使用LDAP over SSL(协议名称中的ldaps +您的exception点)。 您没有证书,因此SSL不起作用。 你有2个选择:

  1. 不使用SSL
  2. 正确配置证书。

我也得到了同样的错误,如下所示。 添加修复,如果这有助于某人。

我在连接到LDAP时从IBM WAS 8.5获得。

我必须确保为NodeDefaultKeystore选择“密钥库名称”,别名为“无”

SSL证书和密钥管理> SSL配置> NodeDefaultSSLSettings

引起:javax.naming.CommunicationException:简单绑定失败:xxxxxx-xxx.xxxxx.xxx:636 [根exception是javax.net.ssl.SSLHandshakeException:握手期间远程主机关闭连接]