2012-08-22 23 views
10

Cuando trato de conectarme al servidor LDAP usando una aplicación LDAP simple recibo un error que dice "error de enlace simple". Supongo que esto está relacionado con algún tipo de BIND. Tengo una propiedad de enlace en uno de los archivos de propiedades para una aplicación diferente, pero no estoy seguro de cómo transferir esa propiedad a este programa.javax.naming.CommunicationException: enlace simple fallido

¿Debo añadir más detalles?

Código

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

el error que estoy recibiendo es

error

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: no se puede encontrar una ruta de certificación válida para el objetivo solicitado "podría tener algo que ver con eso –

Respuesta

1

Usted está tratando de trabajar con LDAP sobre SSL (ldaps en el nombre del protocolo + tu excepción señala eso). No tienes certificados, por lo que SSL no funciona. Tienes 2 opciones:

  1. no funcionan con SSL
  2. certificados de configurar correctamente.
9

La pregunta es un poco más antigua ahora pero bastante común. Intentando explicarlo en pocas palabras:

El problema ocurre debido a la falta de certificados SSL en el almacén de claves JRE.

Para una conexión LDAPS o HTTPS, el tiempo de ejecución java necesita usar el certificado SSL respectivo para crear una conexión segura con el servidor en el otro extremo.

Para recoger el certificado SSL de su almacén de claves, el certificado primero debe instalarse en el almacén de claves Java. El comando 'keytool' ayuda a importar/exportar certificados hacia y desde Java Keystore.

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

Cuando su falta, se obtiene una:

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

Por lo tanto, todo lo que tiene que hacer es instalar el certificado antes de establecer una conexión segura.

0

También recibí el mismo error como a continuación. Agregar solución, si esto ayuda a alguien.

Obtuve de IBM WAS 8.5 mientras me conectaba a LDAP.

que tenía que asegurarse de que "el nombre del almacén de claves" se selecciona a NodeDefaultKeyStore y los alias son certificado de "ninguna"

SSL y gestión de claves> Configuraciones SSL> NodeDefaultSSLSettings

causada por: javax.naming. CommunicationException: enlace simple fallido: xxxxxx-xxx.xxxxx.xxx:636 [La excepción de raíz es javax.net.ssl.SSLHandshakeException: conexión cerrada del host remoto durante el protocolo de enlace]

Cuestiones relacionadas