Я пытаюсь сделать 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
Вы могли заметить, что отладочные данные ничего не делали, чтобы показать части 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
.
вы можете установить в /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.
Очевидно, это сделано, как показано в: этот вопрос суперпользователя
Или вы можете просто проигнорировать его и продолжить то, что вы делали, не проверяя сертификат, но вы должны попытаться проверить его, если вообще возможно.
Если поставщиком LDAP является Active Directory, работающая на Windows Server 2012, см. Не удается связаться с сервером LDAP (-1) для LDAPS и Server 2012
Хорошо, потребовалось много поиска в интернете, но я наконец-то заставил свою работать. Вот что я сделал.
TLS_CACERT /etc/ssl/certs/ca.pem
TLS_REQCERT never
4a. Я добавил TLS_REQCERT по внутренним причинам. Используйте эту настройку на свой страх и риск.
Надеюсь, это поможет
.