Python + LDAP + SSL

Bonne journée.

À l'avance à m'excuser pour mon anglais, mon forums nationaux et les ressources n'ont pas d'aide.

Il y avait un besoin dans le script qui change (ou crée) un mot de passe utilisateur dans l'AD.

Après avoir étudié la question, il est devenu clair que

  1. Mot de passe de céder ou de changement ne peut établir une connexion chiffrée au serveur
  2. Envoyer le mot de passe n'est nécessaire que dans le codage utf-16-le

En général il n'y a pas de problème avec le second, mais d'abord un problème avec

$ python ldap-test-starttls.py 
Traceback (most recent call last):
  File "ldap-test-starttls.py", line 9, in <module>
    l.simple_bind_s( "cn=admin,ou=users,dc=test,dc=ru", "password" )
  File "/usr/lib/python2.7/dist-packages/ldap/ldapobject.py", line 206, in simple_bind_s
    msgid = self.simple_bind(who,cred,serverctrls,clientctrls)
  File "/usr/lib/python2.7/dist-packages/ldap/ldapobject.py", line 200, in simple_bind
    return    self._ldap_call(self._l.simple_bind,who,cred,EncodeControlTuples(serverctrls),EncodeControlTuples(clientctrls))
  File "/usr/lib/python2.7/dist-packages/ldap/ldapobject.py", line 96, in _ldap_call
    result = func(*args,**kwargs)
 ldap.SERVER_DOWN: {'info': 'A TLS packet with unexpected length was received.', 'desc': "Can't contact LDAP server"}

Code de Script

import ldap
host = 'ldaps://ldap:636'
l = ldap.initialize(host)
l.set_option( ldap.OPT_X_TLS_DEMAND, True )
l.set_option( ldap.OPT_DEBUG_LEVEL, 255 )
username = 'someUser'
new_pass = 'ne$wP4assw0rd3!'
new_password = ('"%s"' % new_pass).encode("utf-16-le")
l.simple_bind_s( "cn=admin,ou=users,dc=test,dc=ru", "password" )
mod_attrs = [(ldap.MOD_REPLACE, 'unicodePwd', new_password)],[( ldap.MOD_REPLACE, 'unicodePwd', new_password)]
l.modify_s('CN=%s,dc=users,dc=test,dc=ru' % username, mod_attrs)
l.unbind_s()
print "Successfully changed password."

Les Chances sont que quelqu'un a déjà résolu un problème similaire. Oui, le script est en cours d'exécution sur Centos et l'utilisation py32win pas possible.

Merci d'avance.

source d'informationauteur ellerseer