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

mis*_*ded 16 java jndi ldap

当尝试使用简单的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();
        }   
    }   
}  
Run Code Online (Sandbox Code Playgroud)

我得到的错误是

错误

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)
Run Code Online (Sandbox Code Playgroud)

iCr*_*rus 16

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

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

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

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

keytool –import -file adserv.crt -keystore <location to keystore> 
Run Code Online (Sandbox Code Playgroud)

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

"sun.security.provider.certpath.SunCertPathBuilderException: 
unable to find valid certification path to requested target". 
Run Code Online (Sandbox Code Playgroud)

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


归档时间:

查看次数:

67175 次

最近记录:

7 年,9 月 前