2012-08-22 346 views
10

當試圖使用簡單的LDAP應用程序連接到LDAP服務器時,出現一個錯誤,指出「簡單綁定失敗」。我假設這與某種BIND有關。我在其中一個屬性文件中爲不同的應用程序綁定了屬性,但不知道如何將該屬性傳遞給此程序。javax.naming.CommunicationException:簡單綁定失敗

我需要添加更多詳細信息嗎?

代碼

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

「sun.security.provider.certpath.SunCertPathBuilderException:無法找到要求的目標的有效證書路徑「可能與它有關 –

回答

1

你試圖通過SSL與LDAP的工作(在協議名稱+你的異常LDAPS指出)。您沒有證書,所以SSL不起作用。你有兩個選擇:

  1. 不要使用SSL
  2. 配置證書正確。
9

這個問題現在有點老,但很常見。試圖簡單解釋它:

由於缺少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". 

所以,你需要做的是建立一個安全的連接之前安裝證書。

0

我也有像下面一樣的錯誤。添加修復程序,如果這有助於某人。

我在連接到LDAP時從IBM WAS 8.5獲得。

我必須確保「密鑰庫名稱」選擇爲NodeDefaultKeystore 和別名是「無」

SSL證書和密鑰管理> SSL配置> NodeDefaultSSLSettings

產生的原因:javax.naming中。 CommunicationException:簡單綁定失敗:xxxxxx-xxx.xxxxx.xxx:636 [根異常是javax.net.ssl.SSLHandshakeException:遠程主機在握手期間關閉了連接]