Подключиться к apaches с помощью python-ldap поверх ldaps

Я установил один 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 в качестве ключа и перезапустите его. Я тоже пробовал ls.set_option(ldap.OPT_X_TLS_CACERTFILE, "/tmp/trusted.ks"), но не повезло.

Что мне здесь не хватает? Примечание. Я могу подключиться, задав ldap.OPT_X_TLS_REQUIRE_CERT значение "разрешить" или "никогда". Но я не хочу этого делать, а проверять сертификаты.


person codingenious    schedule 04.02.2021    source источник


Ответы (1)


Для сценариев, подключающихся к серверам тестирования или разработки, я всегда использую

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

Также рекомендуется использовать расширение StartTLS, поэтому подключитесь к незашифрованному порту (389 или 10389), а затем выполните

conn.start_tls_s()
person mvreijn    schedule 09.02.2021