2012-08-22 3 views
10

Lorsque j'essaie de me connecter au serveur LDAP à l'aide d'une application LDAP simple, j'obtiens une erreur indiquant que "la liaison simple a échoué". Je suppose que c'est lié à une sorte de BIND. J'ai une propriété de liaison dans l'un des fichiers de propriétés pour une application différente, mais je ne suis pas sûr de savoir comment transmettre cette propriété à ce programme.javax.naming.CommunicationException: la liaison simple a échoué

Dois-je ajouter d'autres détails?

code

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'erreur que je reçois est

Erreur

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: impossible de trouver un chemin de certification valide vers la cible demandée avoir quelque chose à faire avec –

Répondre

1

Vous essayez de travailler avec LDAP sur SSL (LDAPS au nom du protocole + votre exception souligne cela). Vous n'avez pas de certificats, donc SSL ne fonctionne pas. Vous avez 2 choix:

  1. Ne pas travailler avec SSL
  2. Configurer les certificats correctement.
9

La question est un peu plus ancienne maintenant mais assez commune. Tentative d'explication en bref:

Le problème se produit en raison de certificats SSL manquants dans le magasin de clés JRE.

Pour une connexion LDAPS ou HTTPS, le runtime Java doit utiliser le certificat SSL correspondant pour créer une connexion sécurisée avec le serveur à l'autre extrémité.

Pour récupérer le certificat SSL à partir de son magasin de clés, le certificat doit d'abord être installé dans le magasin de clés Java. La commande 'keytool' permet d'importer/d'exporter des certificats depuis et vers Java Keystore.

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

Lorsque son manque, vous obtenez un:

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

Alors, tout ce que vous devez faire est d'installer le certificat avant d'établir une connexion sécurisée.

0

J'ai également eu la même erreur comme ci-dessous. Ajout de correctif, Si cela aide quelqu'un.

J'ai obtenu d'IBM WAS 8.5 tout en se connectant à LDAP.

je devais faire en sorte que "le nom du fichier de clés" est sélectionné pour NodeDefaultKeyStore et alias sont "none"

certificat SSL et gestion des clés> Configurations SSL> NodeDefaultSSLSettings

Causée par: javax.naming. CommunicationException: la liaison simple a échoué: xxxxxx-xxx.xxxxx.xxx:636 [L'exception racine est javax.net.ssl.SSLHandshakeException: la connexion fermée de l'hôte distant pendant la négociation]

Questions connexes