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 так, как Говард Чу предложил где-то. Инструкции по первому находятся в этом сообщении об ошибке.

https://bugs.launchpad.net/bugs/926350

Установить 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 сработал.

Другие вопросы по тегам