1 votes

Ne peut pas contacter le serveur LDAP (avec ldaps) dans Docker

Je tente de faire une recherche LDAP comme ceci :

ldapsearch -x -D "uid=username,ou=people,dc=example" -w passw0rd -H ldaps://example.com "(objectClass=example)"

Mais cela me donne cette erreur :

ldap_sasl_bind(SIMPLE): Cannot contact LDAP server (-1)

Et avec un débogage, c'est :

ldap_url_parse_ext(ldaps://example.com)
ldap_create
ldap_url_parse_ext(ldaps://example.com:636/??base)
ldap_sasl_bind
ldap_send_initial_request
ldap_new_connection 1 1 0
ldap_int_open_connection
ldap_connect_to_host: TCP example.com:636
ldap_new_socket: 3
ldap_prepare_socket: 3
ldap_connect_to_host: Trying X.X.X.X:636
ldap_pvt_connect: fd: 3 tm: -1 async: 0
ldap_err2string
ldap_sasl_bind(SIMPLE): Cannot contact LDAP server (-1)

Je pensais que c'était un problème avec la connexion SSL. Mais non, car cette commande réussit :

openssl s_client -connect example.com:636 

Je ne sais donc pas où est le problème...

Pour plus d'informations, je suis dans un conteneur (Docker) avec une image Ubuntu et ma configuration pour le LDAP est :

BASE    dc=example
URI ldaps://example.com

TLS_REQCERT demand 
TLS_CACERT /etc/ldap/certificates/CA-cert.pem

4voto

JatSing Points 511

Vous pourriez régler dans /etc/ldap.conf

TLS_REQCERT permettre

ce qui, comme vous le soupçonneriez, ne va pas mourir sur des autorités de certificat inconnues. Jetez un oeil sur le man ldap.conf

   TLS_REQCERT 
          Spécifie les vérifications à effectuer sur les certificats serveur dans une session TLS,
          le cas échéant. Le  peut être spécifié comme l'un des mots-clés suivants:

          jamais  Le client ne demandera pas ou ne vérifiera aucun certificat serveur.

          permettre  Le certificat serveur est demandé. Si aucun certificat n'est
                 fourni, la session se déroule normalement. Si un mauvais
                 certificat est fourni, il sera ignoré et la session se
                 déroule normalement.

          essayer   Le certificat serveur est demandé. Si aucun certificat n'est
                 fourni, la session se déroule normalement. Si un mauvais
                 certificat est fourni, la session est immédiatement termi
                 née.

          exigence | dur
                 Ces mots-clés sont équivalents. Le certificat serveur est
                 demandé. Si aucun certificat n'est fourni, ou si un mauvais 
                 certificat est fourni, la session est immédiatement termi
                 née. C'est le réglage par défaut.

Une fois que vous avez vérifié que ldapsearch fonctionne, la bonne chose à faire serait d'obtenir une copie du certificat racine de l'AC et de l'importer dans le magasin système de votre système ubuntu.

Apparemment, cela se fait comme indiqué dans: cette question de super utilisateur

Ou vous pourriez simplement l'ignorer et continuer ce que vous faisiez sans vérifier le certificat, mais vous devriez essayer de le vérifier si possible.

1voto

user1607158 Points 101

Ok, cela a nécessité beaucoup de recherche en ligne, mais j'ai enfin réussi à le faire fonctionner. Voici ce que j'ai fait.

  1. Utilisez la commande suivante pour obtenir le certificat du serveur LDAP :
    openssl s_client -connect example.com:636
  2. Copiez tout ce qui se trouve entre -----BEGIN CERTIFICATE----- et -----END CERTIFICATE----- inclus.
  3. Enregistrez cela dans un fichier. Quelque chose comme ca.pem
  4. Modifiez votre fichier ldap.conf, qui pourrait se trouver dans le répertoire /etc/ldap ou /etc/openldap, et ajoutez les lignes suivantes. La ligne TLS_CACERT doit pointer vers l'endroit où vous avez enregistré le fichier à l'étape précédente.

TLS_CACERT /etc/ssl/certs/ca.pem
TLS_REQCERT never

4a. J'ai ajouté TLS_REQCERT pour des raisons internes. Utilisez ce paramètre selon vos besoins/risk.

  1. Exécutez votre commande ldapsearch. J'utilise ldapsearch -x -Z -d1 -H ldaps://example.com:636 -D "votre dn de liaison" -w "votre mot de passe de liaison" -b"votre dn de base" "(cn=votre cn)"

J'espère que cela vous aidera.

0voto

Cameron Kerr Points 3781

Vous aurez remarqué que la sortie de débogage n'a rien montré des parties SSL/TLS de la communication. Si je me souviens bien, afin d'obtenir ldapsearch pour afficher cela, vous devez utiliser les options -v2 -d (éventuellement avec un niveau de débogage plus élevé).

Notez que juste parce qu'openssl fonctionne, cela ne signifie pas que ldapsearch (bibliothèques openldap) regardera au même endroit pour les informations de certificat. Remarquez également qu'openssl s_client ne valide pas le certificat par défaut.

Vous pouvez essayer de définir TLS_REQCERT à never comme un outil de débogage.

Je suggèrerais également d'utiliser strace -e trace=file -f ldapsearch ... comme outil pour découvrir quels fichiers sont réellement recherchés (et si les permissions posent problème, etc.).

Les systèmes Linux ont tendance à avoir plusieurs fichiers de configuration ldap (pam_ldap, nss_ldap, commandes openldap, ...). Quel fichier avez-vous utilisé?

Une des questions que je pose généralement aux personnes qui viennent me poser des questions similaires au travail, est dans quel language est écrit le client (ou plutôt, quelle API client LDAP est utilisée -- par exemple OpenLDAP avec OpenSSL, ou Java 1.7 sans les modules de sécurité élevée, afin que je puisse savoir quels problèmes considérer avant les autres). Pour cette raison, ne vous attendez pas à ce que des choses comme une API Java fonctionnent une fois que vous avez une invocation fonctionnelle de ldapsearch.

0voto

Gorm Casper Points 135

Si le fournisseur LDAP est Active Directory fonctionnant sur Windows Server 2012, consultez Impossible de contacter le serveur LDAP (-1) pour LDAPS et Server 2012

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X