自签名证书的LDAP连接问题

10 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"}
Run Code Online (Sandbox Code Playgroud)

当我使用ldap://而不是ldaps://时,它可以正常工作.

任何人都可以帮我弄清楚这是为什么吗?

谢谢.:)

jbl*_*ine 21

我来这里寻找解决我的问题的方法.这个问答并没有解决我的确切问题,但是其他人在寻找我的确切问题解决方案时会发现以下内容很有用:

对于那些使用SSL/TLS进行基本传输加密而非身份验证(自签名证书)的用户,您只需关闭服务器证书的严格检查:

ldap.set_option(ldap.OPT_X_TLS_REQUIRE_CERT, ldap.OPT_X_TLS_ALLOW)
Run Code Online (Sandbox Code Playgroud)

这大致类似于设置OpenLDAP 2.1+客户端设置:

tls_checkpeer no
Run Code Online (Sandbox Code Playgroud)

  • 它确实关闭了*严格*检查,只是不是在那个措辞的极端意义上。OPT_X_TLS_NEVER 甚至不尝试验证证书。OPT_X_TLS_ALLOW 尝试验证证书,但忽略验证失败的证书。我们可能不得不同意不同意;) (2认同)

小智 8

忽略证书错误

ldap.set_option(ldap.OPT_X_TLS_REQUIRE_CERT, ldap.OPT_X_TLS_NEVER)
Run Code Online (Sandbox Code Playgroud)

  • 只是刚刚发现这需要在初始化之前进行。 (4认同)

Mar*_*ark 5

我从来没有在SSL上使用python-ldap,但我相信你必须告诉ldap在服务器证书上执行哪些检查.如果将其设置为demand(可能是默认值),则必须为其提供有效的证书.

请参阅Demo目录中的initialize.py源.