通过 TLS 连接到 LDAP 服务器失败
我正在使用 Python 2.7 ldap 模块,并尝试连接到启用了 TLS 的 LDAP 服务器,但到目前为止我只遇到了很多问题。在尝试调试问题时,我得到的信息很少。这是我正在下面测试的一个简单脚本
import ldap
LDAP_SERVER = 'ldap://ldap.somedomain.com:389'
LDAP_BASE = 'ou=users,dc=ldap,dc=test,dc=com'
try:
conn = ldap.initialize(LDAP_SERVER, bytes_mode=False)
conn.set_option(ldap.OPT_REFERRALS, 0)
conn.set_option(ldap.OPT_PROTOCOL_VERSION, 3)
conn.set_option(ldap.OPT_X_TLS_CACERTFILE, "/path/to/cacert.pem")
conn.set_option(ldap.OPT_X_TLS,ldap.OPT_X_TLS_DEMAND)
conn.set_option(ldap.OPT_X_TLS_DEMAND, True)
conn.set_option(ldap.OPT_DEBUG_LEVEL, 255)
conn.start_tls_s()
except ldap.LDAPError, e:
print e
raise
print 'done'
测试脚本时,出现 conn.start_tls_s
时会引发异常行被执行。这是返回的错误:
ldap.CONNECT_ERROR: {'info': u'(unknown error code)', 'errno': 2, 'desc': u'Connect error'}
堆栈跟踪:
File "/home/eric/Desktop/test_ldap.py", line 14, in <module>
conn.start_tls_s()
File "/usr/local/lib/python2.7/dist-packages/ldap/ldapobject.py", line 864, in start_tls_s
return self._ldap_call(self._l.start_tls_s)
File "/usr/local/lib/python2.7/dist-packages/ldap/ldapobject.py", line 329, in _ldap_call
reraise(exc_type, exc_value, exc_traceback)
File "/usr/local/lib/python2.7/dist-packages/ldap/ldapobject.py", line 313, in _ldap_call
result = func(*args,**kwargs)
注意 - 我的 LDAP 服务器上的端口 389 是安全的并接受 TLS 连接,这就是 LDAP_SERVER
的原因未设置为 ldaps://ldap.somedomain.com:636
在上面的例子中。
我也在使用 Ubuntu 14.04 虚拟机。非常感谢任何想法和提示。
最佳答案
好的,基本上我需要做几件事。我必须添加 cacert.pem 文件的副本,然后编辑 ldap.conf 文件,然后我终于能够使用 TLS 连接到 LDAP 服务器。
如果您没有 cacert.pem 文件,那么您可能需要制作一个,或者如果您不知道如何制作,请让网络管理员获取一个。有关使用证书的详细信息,请参阅下面的链接:http://www.openldap.org/faq/data/cache/185.html
由于 python-ldap 基于 OpenLdap,因此您可能需要按照此处所述安装一些依赖项:I can't install python-ldap
如果在 Ubuntu 上安装了 ldap,那么您应该看到这样的文件结构:
/etc/ldap
ldap.conf sasl2 schema slapd.d
我在 ldap
中创建了一个名为 cacert
的新目录,然后在其中添加了 cacert.pem 文件,如下所示:/etc/ldap/cacert/cacert .pem
然后我编辑了 ldap.conf
,做了以下更改:
TLS_CACERT /etc/ldap/cacert/cacert.pem
TLS_REQCERT allow
保存 ldap.conf 后,我通过在终端中输入以下内容来测试连接,最终能够连接并从服务器返回结果:
ldapsearch -H ldap://ldap.yourdomain.com -Z -x -D "cn=admin,dc=ldap,dc=test,dc=com" -w "P@ssWerd2LD@pP" -b "dc=ldap,dc=test,dc=com" uid=*
然后我测试了我的 python 脚本,并且能够在启动 TLS 后运行它而不会引发任何异常 我希望这可以帮助其他在 Ubuntu 上使用 TLS 连接到 LDAP 时遇到问题的人
关于python - 尝试使用 python-ldap 模块通过 TLS 连接到 LDAP 服务器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57914460/