2017-07-22 1 views
0

J'essaie de me connecter à un répertoire actif en utilisant la bibliothèque Python-ldap. J'ai le code bind suivant:Python-ldap peut se connecter au répertoire actif à partir de la console python mais pas de l'application

def bind_connection(): 
    ldap_password = ******* 
    ldap_url = 'ldaps://*******:636 
    ldap_login = "CN=***, CN=Users, DC=***, DC=local" 
    ldap.set_option(ldap.OPT_X_TLS_REQUIRE_CERT, ldap.OPT_X_TLS_NEVER) 
    l = ldap.initialize(ldap_url) 
    l.set_option(ldap.OPT_REFERRALS, 0) 
    l.set_option(ldap.OPT_PROTOCOL_VERSION, 3) 
    l.set_option(ldap.OPT_X_TLS, ldap.OPT_X_TLS_DEMAND) 
    l.set_option(ldap.OPT_X_TLS_DEMAND, True) 
    l.set_option(ldap.OPT_DEBUG_LEVEL, 255) 
    l.simple_bind_s(ldap_login, ldap_password) 
    return l 

Importation et l'exécution de ce dans la console python fonctionne très bien. Je peux rechercher, créer des utilisateurs, etc. avec cette liaison.

Essayer d'utiliser cette classe dans une application retourne Django:

SERVER_DOWN: {'info': 'SSLHandshake() failed: misc. bad certificate 
(-9825)', 'errno': 2, 'desc': "Can't contact LDAP server"} 

Tout le code est exécuté à partir du même environnement de développement. Pourquoi cela fonctionnerait-il dans un cas et pas dans l'autre?

+0

Vous pouvez définir le chemin d'accès du fichier de clés certifiées dans le code. Reportez-vous à: https://stackoverflow.com/questions/29296279/python-and-ldap-via-ssl – Roshith

Répondre

0

Était capable de le comprendre. Je l'ai trouvé dans la démo fournie avec la bibliothèque python-ldap.

# Force libldap to create a new SSL context (must be last TLS option!) 
l.set_option(ldap.OPT_X_TLS_NEWCTX,0) 

Un nouveau contexte SSL doit être créé, et cette option le fera.