Не может связаться с сервером LDAP (с ldaps) в Докере

Я пытаюсь сделать ldapsearch как это:

ldapsearch -x -D "uid=username,ou=people,dc=example" -w passw0rd -H ldaps://example.com "(objectClass=example)"

Но это дает мне эту ошибку:

ldap_sasl_bind(SIMPLE): Can't contact LDAP server (-1)

И с отладкой, это:

ldap_url_parse_ext(ldaps://example.com)
ldap_create
ldap_url_parse_ext(ldaps://example.com:636/??base)
ldap_sasl_bind
ldap_send_initial_request
ldap_new_connection 1 1 0
ldap_int_open_connection
ldap_connect_to_host: TCP example.com:636
ldap_new_socket: 3
ldap_prepare_socket: 3
ldap_connect_to_host: Trying X.X.X.X:636
ldap_pvt_connect: fd: 3 tm: -1 async: 0
ldap_err2string
ldap_sasl_bind(SIMPLE): Can't contact LDAP server (-1)

Я думал, что это была проблема с соединением SSL. Но не, потому что эта команда успешно выполняется:

openssl s_client -connect example.com:636 

Таким образом, я не знаю, где проблема...

Для большей информации я нахожусь в контейнере (Докер) с изображением Ubuntu, и моя конфигурация для LDAP:

BASE    dc=example
URI ldaps://example.com

TLS_REQCERT demand 
TLS_CACERT /etc/ldap/certificates/CA-cert.pem
0
задан 16 September 2014 в 10:06
4 ответа

Вы могли заметить, что отладочные данные ничего не делали, чтобы показать части SSL / TLS связи. IIRC, чтобы ldapsearch выводил такой результат, вам необходимо использовать параметры -v2 -d (возможно, с более высоким уровнем отладки).

Обратите внимание, что только то, что openssl работает, не означает, что ldapsearch (библиотеки openldap) будет искать информацию о сертификате в том же месте. Также обратите внимание, что openssl s_client не проверяет сертификат по умолчанию.

Вы можете попробовать установить TLS_REQCERT как никогда в качестве средства отладки.

Я бы также предложил использовать strace -e trace = file -f ldapsearch. .. для помощи в определении того, какие файлы на самом деле ищутся (и мешают ли разрешения и т. д.)

Системы Linux, как правило, имеют несколько файлов конфигурации ldap (pam_ldap, nss_ldap, openldap команды, ...). Какой файл вы использовали?

Один из вопросов, который я обычно задаю людям, которые приходят ко мне и задают похожие вопросы на работе:на каком языковом стеке написан клиент (или, скорее, какой API-интерфейс клиента LDAP используется - например, OpenLDAP с OpenSSL или Java 1.7 без надстроек High Security, поэтому я могу понять, какие проблемы следует учитывать выше других ). По этой причине не ожидайте, что такие вещи, как Java API, будут работать после того, как у вас есть рабочий вызов ldapsearch .

0
ответ дан 4 December 2019 в 12:30

вы можете установить в /etc/ldap.conf

TLS_REQCERT allow

, что, как вы подозреваете, не исчезнет из-за неизвестных центров сертификации. Взгляните на man ldap.conf

   TLS_REQCERT <level>
          Specifies what checks to perform on server certificates in a TLS
          session, if any. The <level> can be specified as one of the fol‐
          lowing keywords:

          never  The  client will not request or check any server certifi‐
                 cate.

          allow  The server certificate is requested. If no certificate is
                 provided,  the  session  proceeds normally. If a bad cer‐
                 tificate is provided, it will be ignored and the  session
                 proceeds normally.

          try    The server certificate is requested. If no certificate is
                 provided, the session proceeds normally. If  a  bad  cer‐
                 tificate  is  provided, the session is immediately termi‐
                 nated.

          demand | hard
                 These keywords are equivalent. The server certificate  is
                 requested.  If  no certificate is provided, or a bad cer‐
                 tificate is provided, the session is  immediately  termi‐
                 nated. This is the default setting.

. После того, как вы убедились, что ldapsearch работает, правильнее всего будет получить копию корневого сертификата CA и импортировать его в хранилище вашей системы ubuntu.

Очевидно, это сделано, как показано в: этот вопрос суперпользователя

Или вы можете просто проигнорировать его и продолжить то, что вы делали, не проверяя сертификат, но вы должны попытаться проверить его, если вообще возможно.

3
ответ дан 4 December 2019 в 12:30

Если поставщиком LDAP является Active Directory, работающая на Windows Server 2012, см. Не удается связаться с сервером LDAP (-1) для LDAPS и Server 2012

0
ответ дан 4 December 2019 в 12:30

Хорошо, потребовалось много поиска в интернете, но я наконец-то заставил свою работать. Вот что я сделал.

  1. Для получения сертификата с сервера LDAP используйте следующую команду:
    . openssl s_client -connect example.com:636
  2. Copy everything between and including -----BEGIN CERTIFICATE----- and -----END CERTIFICATE-----
  3. Save that to a file. Что-нибудь вроде ca.pem
  4. Редактируйте файл ldap.conf, который может быть в каталоге /etc/ldap или /etc/openldap, и добавьте строки ниже. Строка TLS_CACERT должна указывать на то, куда вы сохранили файл на предыдущем шаге.

TLS_CACERT /etc/ssl/certs/ca.pem
TLS_REQCERT never

4a. Я добавил TLS_REQCERT по внутренним причинам. Используйте эту настройку на свой страх и риск.

  1. Выполните команду ldapsearch. Я использую ldapsearch -x -Z -d1 -H ldaps://example.com:636 -D "your bind dn" -w "your bind password" -b" your base dn" "(cn= your cn )""

Надеюсь, это поможет

.
0
ответ дан 4 December 2019 в 12:30

Теги

Похожие вопросы