python - 尝试使用 python-ldap 模块通过 TLS 连接到 LDAP 服务器

标签 python ssl active-directory ldap ubuntu-14.04

通过 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/

相关文章:

python - 如果给出一个文件作为参数或标准输入,是否有更多的 pythonic 方式打开文件?

python - 如何使用OpenCV将框架存储到文件

php - SSL 连接意外关闭

android - 在较旧的 Android 平台上使用 cz.msebera.android.httpclient 时防止 SSL_do_handshake 失败

powershell - 进行请求时限制Active Directory连接的数量

python - SQLAlchemy:跳过了不支持的基于表达式的索引的反射

python - 如何在 Zenoss 映射中导入 DMD?

.htaccess - 如何使用 htaccess 仅在某些页面上启用 https?

asp.net - 跨域查询用户的全局地址列表(GAL)

windows - 事件目录自定义身份验证