Назад | Перейти на главную страницу

Самозаверяющий сертификат LDAP SSL в Ubuntu 12.04 не принимается

Я работаю с 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 чтобы принять мой самоподписанный сертификат.

Пока что пробовал:

 BASE    dc=[my domain],dc=local
 URI     ldaps://ldap.[my host].local
 TLS_CACERT      /etc/ssl/certs/cacert.crt
 TLS_REQCERT allow
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

Я вижу точную ошибку:

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

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