我目前遇到与ldaps
的连接问题。在389上连接到非TLS / SSL工作正常。但是我无法对此频道进行任何修改。我收到错误UNWILLING_TO_PERFORM: {'info': '0000001F: SvcErr: DSID-031A0FC0, problem 5003 (WILL_NOT_PERFORM), data 0\n', 'desc': 'Server is unwilling to perform'}
。一些谷歌搜索建议需要通过TLS / SSL进行修改。
所以我试图在636上建立联系。事实证明这很麻烦。我试图使用`ldap.set_option(ldap.OPT_X_TLS_REQUIRE_CERT,ldap.OPT_X_TLS_NEVER)'来忽略证书错误。然而,这根本没有帮助。
我不断得到SERVER_DOWN: {'info': 'SSLHandshake() failed: connection closed via error (-9806)', 'desc': "Can't contact LDAP server"}
下面是连接片段。 (我已经确认636是开放的并尝试过多个DC。我已经在连接字符串ldap:\\server:port
,ldaps:\\server
,ldaps:\\server:port
等上尝试了各种组合。
我包含与失败的UNWILLING_TO_PERFORM
错误相关的代码。即使使用高度特权的帐户,也会发生这种情况。
与OutOut TLS一起使用
def changePassword(user_dn):
for user in user_dn:
new_password = pw_gen()
unicode_pass = unicode('\"' + str(new_password) + '\"', 'iso-8859-1')
password_value = unicode_pass.encode('utf-16-le')
add_pass = [(ldap.MOD_REPLACE, 'unicodePwd', [password_value])]
print user
print new_password
try:
l.modify_s(user,add_pass) # `UNWILLING_TO_PERFORM:...'
except Exception:
traceback.print_exc()
TLS连接尝试
ConnectDC = 'ldaps://server:port'
ldap.set_option(ldap.OPT_X_TLS_REQUIRE_CERT, ldap.OPT_X_TLS_NEVER)
l = ldap.initialize(ConnectDC)
l.set_option(ldap.OPT_REFERRALS, 0)
try:
l.simple_bind_s('user', 'pass') # `SERVER_DOWN:...`
except Exception:
traceback.print_exc()