Buen día.Python + LDAP + SSL
Antes de disculparme por mi inglés, mis foros nacionales y recursos no ayudaron.
Hubo una necesidad en el script que cambie (o cree) una contraseña de usuario en AD.
Después de estudiar el tema, se hizo evidente que
- contraseña para asignar o el cambio sólo puede establecer una conexión cifrada al servidor
- Enviar la contraseña sólo es necesaria en la codificación UTF-16-le
En general no hay ningún problema con el segundo, pero primero tiene un problema con
$ 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"}
código 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."
Lo más probable es que alguien ya ha resuelto un problema similar. Sí, el script se ejecuta en Centos y no se puede usar py32win.
Gracias de antemano.
La primera línea de esta respuesta es la que lo hizo por mí. No sé qué tan necesario es el resto para los demás. Parece que esto es necesario para ** TLS disaltable para que realmente use SSL. (Si eso es lo que quería) – SpiRail
Hola, lo intenté con su respuesta, pero no tuve suerte. He publicado mi pregunta http://stackoverflow.com/questions/38603236/update-active-directory-password-using-ldap-python si puedes ayudar –