2012-08-22 10 views
10

Quando si tenta di connettersi al server LDAP utilizzando una semplice applicazione LDAP, viene visualizzato un errore che dice "bind semplice non riuscito". Suppongo che questo sia legato a una sorta di BIND. Ho una proprietà di bind in uno dei file di proprietà per un'applicazione diversa, ma non sono sicuro di come passare quella proprietà a questo programma.javax.naming.CommunicationException: collegamento semplice non riuscito

Devo aggiungere ulteriori dettagli?

Codice

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(); 
     } 
    } 
} 

L'errore che sto ottenendo è

errore

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 trovare il percorso di certificazione valido per il target richiesto "potrebbe avere qualcosa a che fare con questo –

risposta

1

Si sta cercando di lavorare con LDAP su SSL (LDAPS nel nome del protocollo + il tuo eccezione punta a quello). Non hai certificati, quindi SSL non funziona. Hai 2 scelte:

  1. non funzionano con SSL
  2. Configurare i certificati correttamente.
9

La domanda è un po 'più vecchia ora ma abbastanza comune. Tentativo di spiegarlo in breve:

Il problema si verifica a causa della mancanza di certificati SSL nel keystore JRE.

Per una connessione LDAPS o HTTPS, il runtime java deve utilizzare il rispettivo certificato SSL per creare una connessione protetta con il server all'altra estremità.

Per il ritiro del certificato SSL dal proprio archivio chiavi, il certificato deve essere prima installato nell'archivio chiavi Java. Il comando 'keytool' aiuta ad importare/esportare certificati in e da Java Keystore.

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

Quando la sua scomparsa, si ottiene un:

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

Quindi, tutto quello che dovete fare è installare il certificato prima di stabilire una connessione protetta.

0

Ho anche ricevuto lo stesso errore come di seguito. Aggiunta di una correzione, se questo aiuta qualcuno.

Ho ricevuto da IBM WAS 8.5 durante la connessione a LDAP.

ho dovuto fare in modo che "il nome Keystore" viene selezionato per NodeDefaultKeystore e alias sono "none"

certificato SSL e gestione chiavi> configurazioni SSL> NodeDefaultSSLSettings

causati da: javax.naming. CommunicationException: binding semplice non riuscita: xxxxxx-xxx.xxxxx.xxx:636 [eccezione Root è javax.net.ssl.SSLHandshakeException: host remoto connessione durante la stretta di mano chiusa]: in grado di