我正在使用的代码:
# Create LDAPObject instance
conn = ldap.initialize(url)
conn.protocol_version=ldap.VERSION3
conn.simple_bind_s(binddn,bindpw)
# This raises:
# ldap.SERVER_DOWN:
{'info': 'error:14090086:SSL routines:SSL3_GET_SERVER_CERTIFICATE:certificate verify failed', 'desc': "Can't contact LDAP server"}
当我使用ldap://而不是ldaps://时,它可以正常工作。
有人可以帮我弄清楚这是为什么吗?
感谢。 :)
答案 0 :(得分:20)
我来到这里寻找解决与此相关的问题的方法。这个Q& A并没有解决我的确切问题,但是其他人在寻找我的确切问题的解决方案时会发现以下内容:
对于那些使用SSL / TLS进行基本传输加密而非身份验证(自签名证书)的人,您只需关闭服务器证书的严格检查:
ldap.set_option(ldap.OPT_X_TLS_REQUIRE_CERT, ldap.OPT_X_TLS_ALLOW)
这大致类似于设置OpenLDAP 2.1+客户端设置:
tls_checkpeer no
答案 1 :(得分:8)
忽略证书错误
ldap.set_option(ldap.OPT_X_TLS_REQUIRE_CERT, ldap.OPT_X_TLS_NEVER)
答案 2 :(得分:5)
我从来没有在SSL上使用python-ldap,但我相信你必须告诉ldap在服务器证书上执行哪些检查。如果将其设置为demand(可能是默认值),则必须为其提供有效的证书。
请参阅演示目录中的initialize.py来源。
答案 3 :(得分:2)
尝试传递以下环境变量:
LDAPTLS_REQCERT=never
忽略可能已过期或无效的服务器证书。
请参阅: