自签名证书的LDAP连接问题

时间:2010-08-16 17:42:16

标签: python ldap

我正在使用的代码:

# 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://时,它可以正常工作。

有人可以帮我弄清楚这是为什么吗?

感谢。 :)

4 个答案:

答案 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

忽略可能已过期或无效的服务器证书。

请参阅: