Ubuntu 12.04 LDAP SSL самоподписанный сертификат не принят
Я работаю с 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: ///"
Несколько часов Googling, большинство из которых привели к добавлению
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
После нескольких часов этого я надеялся, что кто-то еще видел эту проблему и / или знает, как ее исправить. Пожалуйста, дайте мне знать, если я должен добавить дополнительную информацию, или если вам нужны дополнительные данные.
5 ответов
Проблема заключается в том, что версия GnuTLS, поставляемая с Ubuntu 12.04, использует неисправный крипто-сервер.
Предполагалось, что GnuTLS переключится с использования gcrypt в качестве крипто-сервера на крапиву, но есть проблемы с лицензированием. В частности, некоторые лицензии GPL разрешают связывание с более новыми или старыми версиями GPL, а некоторые - нет.
Вы можете либо пересобрать GnuTLS из источника, настроенного с помощью nettle, либо взломать gcrypt так, как Говард Чу предложил где-то. Инструкции по первому находятся в этом сообщении об ошибке.
Установить 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 сработал.