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

2019-06-27 06:25发布

当试图连接到使用简单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)

Answer 1:

现在的问题是年纪大一点的,但相当普遍。 试图解释在短期:

问题发生由于JRE密钥库缺少SSL证书。

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

从其密钥库拿起SSL证书,证书应先安装在Java密钥存储区。 该“密钥工具”命令有助于导入/导出证书和从Java密钥。

keytool –import -file adserv.crt -keystore <location to keystore> 

当它的缺失,你会得到一个:

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

所以,你需要做的是建立一个安全的连接之前安装证书。



Answer 2:

你试图通过SSL与LDAP的工作(在协议名称LDAPS +你的异常指向)。 你没有证件,所以SSL不工作。 你有两个选择:

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


Answer 3:

我也得到了同样的错误,如下面。 添加修复,如果这可以帮助别人。

我从IBM WAS 8.5,而连接到LDAP。

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

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

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



文章来源: javax.naming.CommunicationException: simple bind failed
标签: java ldap jndi