web-dev-qa-db-fra.com

javax.naming.CommunicationException: échec de la liaison simple

Lorsque j'essaie de me connecter au serveur LDAP à l'aide d'une application LDAP simple, un message d'erreur indiquant que "la liaison simple a échoué" s'affiche. Je suppose que cela est lié à une sorte de BIND. J'ai une propriété bind dans l'un des fichiers de propriétés pour une application différente, mais je ne sais pas comment transmettre cette propriété à ce programme.

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)
14
misguided

La question est un peu plus ancienne maintenant mais assez commune. Tenter de l'expliquer en bref:

Le problème est dû à l'absence de certificats SSL dans le magasin de clés JRE. 

Pour une connexion LDAPS ou HTTPS, le moteur d'exécution 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/exporter des certificats dans et depuis Java Keystore.

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

Quand il manque, vous obtenez un: 

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

Il suffit donc d’installer le certificat avant d’établir une connexion sécurisée.

13
iCrus

Vous essayez de travailler avec LDAP sur SSL (ldaps dans le nom du protocole + votre exception pointe vers cela). Vous n'avez pas de certificat, donc le SSL ne fonctionne pas. Vous avez 2 choix:

  1. Ne fonctionne pas avec SSL
  2. Configurez les certificats correctement.
1
Mark Bramnik

J'ai aussi eu la même erreur que ci-dessous. Ajout de correctif, si cela aide quelqu'un.

J'ai reçu IBM WAS 8.5 lors de la connexion à LDAP.

Je devais m'assurer que "Nom du magasin de clés" est sélectionné pour NodeDefaultKeystore Et que les alias sont "aucun"

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

Causée par: javax.naming.CommunicationException: échec de la liaison simple: xxxxxx-xxx.xxxxx.xxx:636 [L'exception racine est javax.net.ssl.SSLHandshakeException: connexion distante fermée entre hôtes lors de la négociation]

0
Monaj