2012-08-22 16 views
10

Podczas próby połączenia się z serwerem LDAP za pomocą prostej aplikacji LDAP otrzymuję komunikat o błędzie "niepowodzenie proste". Zakładam, że jest to związane z jakimś rodzajem BIND. Mam właściwość bind w jednym z plików właściwości dla innej aplikacji, ale nie jestem pewien, jak przekazać tę właściwość temu programowi.Wywołanie javax.naming.CommunicationException: proste powiązanie nie powiodło się

Czy muszę podać dalsze szczegóły?

Kod

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

Błąd którego jestem coraz to

Błąd

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: unable to znajdź prawidłową ścieżkę certyfikacji do żądanego celu "może mieć z tym coś wspólnego –

Odpowiedz

1

Starasz się pracować z LDAP over SSL (LDAPS w protokole nazwa + swojej wyjątkiem wskazuje na to). Nie masz certyfikatów, więc protokół SSL nie działa. Masz 2 opcje:

  1. nie działają z SSL
  2. certyfikaty Skonfiguruj prawidłowo.
9

Pytanie jest teraz nieco starsze, ale dość powszechne. Próba wyjaśnienia w skrócie:

Problem występuje z powodu braku certyfikatów SSL w magazynie kluczy JRE.

W przypadku połączenia LDAPS lub HTTPS środowisko wykonawcze Java musi wykorzystywać odpowiedni certyfikat SSL do tworzenia bezpiecznego połączenia z serwerem na drugim końcu.

Aby odebrać certyfikat SSL z magazynu kluczy, certyfikat powinien najpierw zostać zainstalowany w magazynie kluczy Java. Komenda "keytool" pomaga w importowaniu/eksportowaniu certyfikatów do i z Java Keystore.

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

Gdy jej brakuje, dostaniesz:

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

Tak, wszystko co musisz zrobić, to zainstalować certyfikat przed nawiązaniem połączenia zabezpieczone.

0

Mam również ten sam błąd, jak poniżej. Dodawanie poprawki, jeśli to pomaga komuś.

Dostałem z IBM WAS 8.5 podczas łączenia się z LDAP.

Musiałem się upewnić, że "nazwa kluczy" wybrano do NodeDefaultKeystore i aliasy są "none"

certyfikat SSL i zarządzania kluczami> Konfiguracje SSL> NodeDefaultSSLSettings

spowodowane: javax.naming. CommunicationException: niepowodzenie prostej bindowania: xxxxxx-xxx.xxxxx.xxx:636 [Wyjątek główny to javax.net.ssl.SSLHandshakeException: zdalne połączenie hosta zamkniętego podczas uzgadniania]

Powiązane problemy