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

尝试使用python LDAP模块通过TLS连接到LDAP服务器,python,ssl,active-directory,ldap,ubuntu-14.04,Python,Ssl,Active Directory,Ldap,Ubuntu 14.04,通过TLS连接到LDAP服务器的连接失败 我正在使用Python2.7LDAP模块,并尝试连接到启用TLS的ldap服务器,但到目前为止,我只遇到了许多问题。当试图调试这个问题时,我得到的信息很少。下面是我正在测试的一个简单脚本 导入ldap LDAP_服务器ldap://ldap.somedomain.com:389' LDAP_BASE='ou=users,dc=LDAP,dc=test,dc=com' 尝试: conn=ldap.initialize(ldap\u服务器,字节\u模式=Fa

通过TLS连接到LDAP服务器的连接失败

我正在使用Python2.7LDAP模块,并尝试连接到启用TLS的ldap服务器,但到目前为止,我只遇到了许多问题。当试图调试这个问题时,我得到的信息很少。下面是我正在测试的一个简单脚本

导入ldap
LDAP_服务器ldap://ldap.somedomain.com:389'
LDAP_BASE='ou=users,dc=LDAP,dc=test,dc=com'
尝试:
conn=ldap.initialize(ldap\u服务器,字节\u模式=False)
conn.set_选项(ldap.OPT_引用,0)
conn.set_选项(ldap.OPT_协议版本,3)
conn.set_选项(ldap.OPT_X_TLS_CACERTFILE,“/path/to/cacert.pem”)
conn.set_选项(ldap.OPT_X_TLS,ldap.OPT_X_TLS_DEMAND)
conn.set_选项(ldap.OPT_X_TLS_DEMAND,True)
conn.set_选项(ldap.OPT_调试_级别,255)
控制室启动
除ldap.ldaperor外,e:
打印e
提升
打印“完成”
测试脚本时,执行
conn.start\u tls\s
行时会引发异常。以下是返回的错误:

ldap.CONNECT_错误:{'info':u'(未知错误代码)'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)
文件“/home/eric/Desktop/test_ldap.py”,第14行,在
控制室启动
文件“/usr/local/lib/python2.7/dist packages/ldap/ldapobject.py”,第864行,在start\u tls\s中
返回self.\u ldap\u调用(self.\u l.启动\u tls)
文件“/usr/local/lib/python2.7/dist packages/ldap/ldapobject.py”,第329行,在ldap调用中
重新提升(exc_类型、exc_值、exc_回溯)
文件“/usr/local/lib/python2.7/dist packages/ldap/ldapobject.py”,第313行,在ldap调用中
结果=函数(*args,**kwargs)
注意-我的LDAP服务器上的端口389是安全的,并且接受TLS连接,这就是为什么
LDAP\u服务器
未设置为
ldaps://ldap.somedomain.com:636
在上面的示例中


我也在使用Ubuntu 14.04虚拟机。非常感谢您的任何想法和建议

好的,所以基本上我需要做几件事。我必须添加一个cacert.pem文件的副本,然后编辑一个ldap.conf文件,最后才能够使用TLS连接到ldap服务器

如果您没有cacert.pem文件,则可能需要创建一个,或者如果您不知道如何创建,请让网络管理员获取一个。有关使用证书的详细信息,请参阅下面的链接:

由于python ldap基于OpenLdap,因此您可能需要安装一些依赖项,如下所述:

如果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时遇到问题的人

您是否从同一主机上使用命令行尝试过,比如使用
ldapsearch
,或者甚至只使用
openssl s_client
的TLS连接?我很好奇这是否是您确定的配置。
TLS\u REQCERT allow
修复了我的问题,但它与我有关。OpenLDAP对此表示:“通常没有很好的理由更改此设置。”