2010-08-16 10 views
7

Le code J'utilise:problème de connexion LDAP avec certificat auto-signé

# Create LDAPObject instance 
conn = ldap.initialize(url) 
conn.protocol_version=ldap.VERSION3 

conn.simple_bind_s(binddn,bindpw) 
# This raises: 
# ldap.SERVER_DOWN: 
    {'info': 'error:14090086:SSL routines:SSL3_GET_SERVER_CERTIFICATE:certificate verify failed', 'desc': "Can't contact LDAP server"} 

Quand j'utilise ldap: // au lieu de ldaps: //, cela fonctionne correctement.

Quelqu'un peut-il m'aider à comprendre pourquoi?

Merci. :)

Répondre

4

Je n'ai jamais utilisé python-ldap sur SSL mais je crois que vous devez dire à ldap quelles vérifications effectuer sur le certificat du serveur. Si cela est défini sur demande (qui peut être la valeur par défaut), vous devez lui donner des certificats valides. Voir le initialize.py dans le répertoire de démonstration de la source.

+0

initialize.py était parfait. Merci! :) –

17

Je suis venu ici à la recherche d'une solution à mon problème lié à cela. Ce Q & A n'a pas résolu mon problème exact, mais d'autres qui cherchent ma solution de problème exact trouverez les éléments suivants utiles:

Pour ceux qui utilisent le protocole SSL/TLS pour le chiffrement de transport de base et non vérification de l'identité (certificats auto-signés), vous mettez juste à côté de la vérification stricte du certificat du serveur:

ldap.set_option(ldap.OPT_X_TLS_REQUIRE_CERT, ldap.OPT_X_TLS_ALLOW) 

C'est à peu près analogue à régler le paramètre client OpenLDAP 2.1+:

tls_checkpeer no 
+0

Cela ne désactive pas la vérification stricte. Au lieu de 'ldap.OPT_X_TLS_ALLOW' il devrait lire' ldap.OPT_X_TLS_NEVER'. – Olli

+0

Il désactive * strict * vérification, mais pas dans le sens extrême de cette formulation. OPT_X_TLS_NEVER n'essaie même pas de vérifier le certificat. OPT_X_TLS_ALLOW essaie de vérifier le certificat, mais l'échec de la vérification du certificat est ignoré. Nous devrons probablement être d'accord pour ne pas être d'accord;) – jblaine

6

pour ignorer les erreurs de certificat

ldap.set_option(ldap.OPT_X_TLS_REQUIRE_CERT, ldap.OPT_X_TLS_NEVER)