Я работаю с Ubuntu 12.04, используя сервер OpenLDAP. Я следил за инструкции на страницах справки Ubuntu и может с радостью подключиться без защиты. Чтобы проверить свое соединение, я использую ldapsearch
команда выглядит так:
ldapsearch -xv -H ldap://ldap.[my host].local -b dc=[my domain],dc=local -d8 -ZZ
Я также использовал:
ldapsearch -xv -H ldaps://ldap.[my host].local -b dc=[my domain],dc=local -d8
Насколько я могу судить, я правильно настроил свой сертификат, но независимо от того, почему я пытаюсь, я не могу получить ldapsearch
чтобы принять мой самоподписанный сертификат.
Пока что пробовал:
/etc/ldap/ldap.conf
файл, чтобы он выглядел так:BASE dc=[my domain],dc=local URI ldaps://ldap.[my host].local TLS_CACERT /etc/ssl/certs/cacert.crt TLS_REQCERT allow
/etc/ldap.conf
файл, чтобы он выглядел так:base dc=[my domain],dc=local uri ldapi:///ldap.[my host].local uri ldaps:///ldap.[my host].local ldap_version 3 ssl start_tls ssl on tls_checkpeer no TLS_REQCERT allow
Обновление моего /etc/default/slapd
включать:
SLAPD_SERVICES = "ldap: /// ldapi: /// ldaps: ///"
Несколько часов поиска в Google, большинство из которых привели к добавлению TLS_REQCERT allow
Я вижу точную ошибку:
ldap_initialize( ldap://ldap.[my host].local )
request done: ld 0x20038710 msgid 1
TLS certificate verification: Error, self signed certificate in certificate chain
TLS: can't connect.
ldap_start_tls: Connect error (-11)
additional info: error:14090086:SSL routines:SSL3_GET_SERVER_CERTIFICATE:certificate verify failed
После нескольких часов этого я надеялся, что кто-то еще видел эту проблему и / или знает, как ее исправить. Пожалуйста, дайте мне знать, если мне нужно добавить дополнительную информацию, или если вам нужны дополнительные данные.
Установить LDAPTLS_REQCERT
переменная для never
игнорировать сертификат на сервере, срок действия которого может быть истек или недействителен, например:
LDAPTLS_REQCERT=never ldapsearch -D "cn=drupal-test,ou=Services,dc=example,dc=com" -w my_pass -h ldap.example.com -b "ou=People,dc=example,dc=com" -s sub -x -ZZ "(uid=admin)"
или проверьте сервер, есть ли у него правильный сертификат.
На клиентской машине, где вы запускаете ldapsearch, вы должны иметь в ldap.conf
TLS_CACERT /etc/ssl/certs/cacert.crt
Я скопировал путь из конфигурации вашего сервера, где вы сохранили сертификат CA. Скопируйте сертификат CA с сервера на клиент в то же место, что и путь.
Посмотреть здесь -- http://www.openldap.org/pub/ksoper/OpenLDAP_TLS.html
Я столкнулся с аналогичной проблемой - пытался ldapsearch сервер каталогов LDAPS с самозаверяющим сертификатом. Вот настоящая ошибка, которую вы получаете от ldapsearch с установленным уровнем отладки -d8:
TLS certificate verification: Error, self signed certificate in certificate chain
TLS: can't connect.
ldap_bind: Can't contact LDAP server (-1)
additional info: error:14090086:SSL routines:SSL3_GET_SERVER_CERTIFICATE:certificate verify failed
Я обнаружил, что сервер уже был настроен с помощью «TLS_REQCERT try», поэтому я не хотел изменять фактический файл ldap.conf на сервере, если он был настроен и работал для других приложений. Обнаружено, что существует локальный файл конфигурации '.ldaprc', который используется для работы ldapsearch (и других утилит) без глобальной конфигурации. Это позволило мне изменить настройку TLS_REQCERT на «разрешить», что решило мою проблему с ldapsearch:
#~/.ldaprc
TLS_REQCERT allow
Вот результат с этим на месте и -d8:
TLS certificate verification: Error, self signed certificate in certificate chain
TLS: unable to get peer certificate.
... (actual query works)...
Получил ту же проблему, моя причина отказа - использование LDAP 12.04 (пакет slapd построен с GNUTLS) вместе с моим сертификатом, который создается с использованием openssl (с помощью сценария CA.pl)
Решение: воссоздать самоподписанный сертификат с помощью certtool GNUTLS, тогда мой LDAP с TLS работал.
Проблема в том, что версия GnuTLS, поставляемая с Ubuntu 12.04, использует дефектный криптографический сервер.
Предполагалось, что GnuTLS будет переключен с использования gcrypt в качестве криптовалютного сервера на крапиву, но есть проблемы с лицензированием. В частности, некоторые лицензии GPL разрешают связывание с более новыми или старыми версиями GPL, а некоторые - нет.
Вы можете либо пересобрать GnuTLS из источника, настроенного с помощью крапивы, либо взломать gcrypt, как где-то предложил Говард Чу. Инструкции по первому есть в этом отчете об ошибке.