【问题标题】:Connect to apacheds using python-ldap over ldaps通过 ldaps 使用 python-ldap 连接到 apacheds
【发布时间】:2021-02-04 17:52:07
【问题描述】:

我已经安装了一个 ApacheDS(Apache 目录)并尝试通过 ldaps 连接它。 我能够通过 ldap(端口 10389)成功对其进行身份验证,但在尝试使其在 ldaps 上工作时遇到错误。

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/usr/local/lib/python3.6/dist-packages/ldap/ldapobject.py", line 445, in simple_bind_s
    msgid = self.simple_bind(who,cred,serverctrls,clientctrls)
  File "/usr/local/lib/python3.6/dist-packages/ldap/ldapobject.py", line 439, in simple_bind
    return self._ldap_call(self._l.simple_bind,who,cred,RequestControlTuples(serverctrls),RequestControlTuples(clientctrls))
  File "/usr/local/lib/python3.6/dist-packages/ldap/ldapobject.py", line 331, in _ldap_call
    reraise(exc_type, exc_value, exc_traceback)
  File "/usr/local/lib/python3.6/dist-packages/ldap/compat.py", line 44, in reraise
    raise exc_value
  File "/usr/local/lib/python3.6/dist-packages/ldap/ldapobject.py", line 315, in _ldap_call
    result = func(*args,**kwargs)
ldap.SERVER_DOWN: {'desc': "Can't contact LDAP server", 'errno': 2, 'info': '(unknown error code)'}
>>>

我知道这是由于证书验证。

用于验证的代码是:

import ldap
import os
ldap.set_option(ldap.OPT_X_TLS_REQUIRE_CERT, ldap.OPT_X_TLS_DEMAND)
ls = ldap.initialize('ldaps://10.120.213.106:10636', trace_level=2)
ls.set_option(ldap.OPT_REFERRALS, 0)
ls.set_option(ldap.OPT_PROTOCOL_VERSION, 3)
ls.set_option(ldap.OPT_X_TLS,ldap.OPT_X_TLS_DEMAND)
ls.set_option(ldap.OPT_X_TLS_DEMAND, True)
ls.set_option(ldap.OPT_DEBUG_LEVEL, 4095)
ls.set_option(ldap.OPT_X_TLS_CACERTFILE, "/tmp/server.cer")
ls.simple_bind_s('uid=admin,ou=system', 'secret')

我无法找到 ApacheDS 默认提供的自签名证书,因此我使用创建了一个证书和一个密钥库

keytool -genkey -keyalg "RSA" -dname "cn=hax,ou=some,dc=com, o=ASF, c=US" -alias hax -keystore hax.ks -storepass secret -validity 730

然后使用以下命令将证书导出到受信任的密钥库中:

keytool -export -keystore hax.ks -alias hax -file hax.cer
keytool -import -file hax.cer -alias hax -keystore trusted.ks -storepass secret

将 apacheDS 配置为使用 hax.ks 作为 keyotre 并重新启动它。 我也试过ls.set_option(ldap.OPT_X_TLS_CACERTFILE, "/tmp/trusted.ks"),但没有运气。

我在这里缺少什么? 注意:我可以通过将ldap.OPT_X_TLS_REQUIRE_CERT 设置为允许或从不连接。但我不想这样做,但要验证证书。

【问题讨论】:

    标签: python ldap apacheds python-ldap


    【解决方案1】:

    对于连接到测试或开发服务器的脚本,我总是使用

    ldap.set_option(ldap.OPT_X_TLS_REQUIRE_CERT, ldap.OPT_X_TLS_NEVER)
    

    另外,建议使用StartTLS扩展,所以连接明文端口(389或10389)再发出

    conn.start_tls_s()
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-08-30
      • 1970-01-01
      • 1970-01-01
      • 2013-01-26
      • 2017-09-05
      • 1970-01-01
      相关资源
      最近更新 更多