python - अजगर+एलडीएपी+एसएसएल



ssl active-directory (1)

इस तरह से अध्ययन करने के बाद, मुझे अपने स्वयं के समाधान पर मिला

ldap.set_option(ldap.OPT_X_TLS_REQUIRE_CERT, ldap.OPT_X_TLS_NEVER)
l = ldap.initialize("ldaps://ldap:636")
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("[email protected]","password")

अच्छा दिन।

अग्रिम में मेरे अंग्रेजी के लिए माफी मांगने के लिए, मेरे राष्ट्रीय मंचों और संसाधनों ने मदद नहीं की।

स्क्रिप्ट में एक आवश्यकता थी जो एडी में एक यूजर पासवर्ड को बदलता है (या बनाता है)।

समस्या का अध्ययन करने के बाद, यह स्पष्ट हो गया कि यह

  1. असाइन करने या बदलने के लिए पासवर्ड केवल सर्वर पर एन्क्रिप्टेड कनेक्शन स्थापित कर सकता है
  2. एन्कोडिंग utf-16-le में पासवर्ड केवल आवश्यक है

सामान्य रूप से दूसरे के साथ कोई समस्या नहीं है, लेकिन पहले के साथ समस्या है

$ 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"}

स्क्रिप्ट कोड

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."

संभावना है कि किसी ने पहले ही एक समान समस्या हल कर ली है हां, स्क्रिप्ट Centos पर चल रही है और py32win का उपयोग संभव नहीं है।

अग्रिम में धन्यवाद।





python-ldap