尝试使用简单的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.<init>(LdapCtx.java:316)
at com.sun.jndi.ldap.LdapCtxFactory.getUsingURL(LdapCtxFactory.java:193)
答案 0 :(得分:14)
现在这个问题有点老了但很常见。试图简单解释一下:
由于JRE密钥库中缺少SSL证书,因此会出现此问题。
对于LDAPS或HTTPS连接,Java运行时需要使用相应的SSL证书与另一端的服务器建立安全连接。
要从其密钥库中获取SSL证书,应首先将证书安装在Java密钥库中。 'keytool'命令有助于从Java Keystore导入/导出证书。
keytool –import -file adserv.crt -keystore <location to keystore>
当它失踪时,你得到一个:
"sun.security.provider.certpath.SunCertPathBuilderException:
unable to find valid certification path to requested target".
因此,您需要做的就是在建立安全连接之前安装证书。
答案 1 :(得分:1)
您正在尝试使用LDAP over SSL(协议名称中的ldaps +您的异常点)。您没有证书,因此SSL不起作用。你有两个选择:
答案 2 :(得分:0)
我也遇到了同样的错误,如下所示。添加修复,如果这有助于某人。
我在连接到LDAP时从IBM WAS 8.5获得。
我必须确保&#34; Keystore名称&#34;被选中到NodeDefaultKeystore 和别名是&#34;无&#34;
SSL证书和密钥管理&gt; SSL配置&gt; NodeDefaultSSLSettings
引起:javax.naming.CommunicationException:简单绑定失败:xxxxxx-xxx.xxxxx.xxx:636 [root异常是javax.net.ssl.SSLHandshakeException:握手期间远程主机关闭连接]