Некоторые системы не могут подключиться к ldap через ldaps, но другие могут, это сертификат подстановки?

15

При попытке установить соединение ldaps с моим сервером Novel eDirectory 8.8 иногда приходится помещать TLS_REQCERT neverв файл клиентского сервера ldap.conf. Очевидно, это плохая идея.

Команда, которую я запускаю, выглядит примерно так: учетные данные действительно работают ...

ldapsearch -x -H ldaps://ldapserver -b 'ou=active,ou=people,dc=example,dc=org' -D 'cn=admin,dc=example,dc=org' -W "cn=username"

На Ubuntu 13.10 работает нормально.

На SLES работает нормально.

На CentOS 6.5 он возвращает:

ldap_sasl_bind(SIMPLE): Can't contact LDAP server (-1)

Теперь сертификат, который я импортировал, является сертификатом подстановочного знака, приобретенным у DigiCert. Мой коллега обнаружил некоторые сообщения, указывающие, что в некоторых системах возникают проблемы с подстановочными знаками.

Так виноват ли подстановочный знак? Если так, как я могу это исправить?

Если это не групповой сертификат, то что это?

Следуя совету Эндрю Шульман, я добавил -d1в команду ldapsearch. Вот что я закончил:

ldap_url_parse_ext(ldaps://ldap.example.org)
ldap_create
ldap_url_parse_ext(ldaps://ldap.example.org:636/??base)
Enter LDAP Password: 
ldap_sasl_bind
ldap_send_initial_request
ldap_new_connection 1 1 0
ldap_int_open_connection
ldap_connect_to_host: TCP ldap.example.org:636
ldap_new_socket: 3
ldap_prepare_socket: 3
ldap_connect_to_host: Trying 10.225.0.24:636
ldap_pvt_connect: fd: 3 tm: -1 async: 0
TLS: certdb config: configDir='/etc/openldap' tokenDescription='ldap(0)' certPrefix='cacerts' keyPrefix='cacerts' flags=readOnly
TLS: cannot open certdb '/etc/openldap', error -8018:Unknown PKCS #11 error.
TLS: could not get info about the CA certificate directory /etc/openldap/cacerts - error -5950:File not found.
TLS: certificate [CN=DigiCert High Assurance EV Root CA,OU=www.digicert.com,O=DigiCert Inc,C=US] is not valid - error -8172:Peer's certificate issuer has been marked as not trusted by the user..
TLS: error: connect - force handshake failure: errno 2 - moznss error -8172
TLS: can't connect: TLS error -8172:Peer's certificate issuer has been marked as not trusted by the user..
ldap_err2string
ldap_sasl_bind(SIMPLE): Can't contact LDAP server (-1)

Из того, что это говорит, CentOS не доверяет DigiCert? Или CentOS не имеет списка доверенных эмитентов?

Дэвид Р.
источник
1
«Невозможно связаться с сервером LDAP» звучит больше, как будто сервер просто недоступен с этого клиентского компьютера. Вы проверили сначала, что вы можете подключиться к нему? Например, telnet ldapserver ldapsили openssl s_client -connect ldapserver:636.
Ричард Э. Сильверман
Да, я подтвердил, что он может подключиться к серверу. В конце концов, это никогда бы не сработало, если бы вообще не могло подключиться.
Дэвид Р.
Вы упомянули три разных клиентских хоста. Тот, который не работает, возможно, не смог подключиться из-за проблем с сетью, в то время как другие могли.
Ричард Э. Сильверман
Я думал, что мое сообщение было довольно ясно, что я редактировал файл ldap.conf на всех хостах. Как и в случае, когда я добавил строку в файл, он работал, но без строки это не так. Таким образом, не проблема подключения.
Дэвид Р.
Мне было непонятно, когда я прочитал твой пост вначале, хотя теперь я понимаю, что ты имеешь в виду. В любом случае, добавленная вами информация об отладке TLS показывает проблему; Я добавил ответ, чтобы продолжить.
Ричард Э. Сильверман

Ответы:

9

ldapsearch ищет в / etc / openldap / cacerts хранилище доверенных сертификатов CA, которое, очевидно, не настроено, и поэтому оно отклоняет сертификат, поскольку не может создать для него цепочку доверия. Если бы ldapsearch использовал OpenSSL, ему потребовалась бы коллекция форматов "hashdir", созданная, например, программой Red Hat "authconfig", или один файл с простым списком доверенных сертификатов. Ссылка здесь на «moznss» предполагает, что этот ldapsearch построен на Mozilla NSS, и в этом случае вам нужно использовать «certutil» для создания cert db (или лучше указать его в системном хранилище сертификатов NSS, если оно есть) ,

В системах, где он работает, ldapsearch должен иметь работающее хранилище сертификатов, возможно, потому, что эти пакеты OpenLDAP построены вместо OpenSSL (или, возможно, там есть работающее хранилище в стиле NSS).

Ричард Э. Сильверман
источник
2
Ах. /etc/openldap/certsгде находится магазин сертификатов. Не касцеры. В /etc/openldap/ldap.conf я изменился TLS_CACERTDIR /etc/openldap/cacertsна, TLS_CACERTDIR /etc/openldap/certsи моя команда ldapsearch начала работать. Благодарность!
Дэвид Р.
У меня установлен ldapsearch в Ubuntu 16.04, и нет каталога / etc / openldap.
vcardillo
13

ldapsearch скажет «Не удается связаться с сервером LDAP», если он не может проверить сертификат TLS. Добавьте -d1в команду ldapsearch и проверьте выходные строки, начинающиеся с «TLS:», чтобы получить дополнительную информацию о том, происходит ли сбой подключения TLS и почему.

Эндрю Шульман
источник
Я отредактировал свой вопрос в ответ на ваше предложение. Благодарность!
Дэвид Р.
8

Решение зависит от вашей установки:

  • Если вы используете не действительный сертификат , вы можете заставить его принять настройки /etc/openldap/ldap.confс

    TLS_REQCERT allow
    

    или

    TLS_REQCERT never
    
  • Если вы используете действительный сертификат, вероятно, ваша установка ldap не знает, где находится хранилище доверенных сертификатов CA (возможно, в зависимости от вашей установки OpenSSL). Затем вы можете попытаться установить его местоположение и принудительно проверить настройку /etc/openldap/ldap.confс помощью

    TLS_CACERT /etc/openldap/cacert
    TLS_REQCERT demand
    

    /etc/openldap/cacertможет быть этим или находиться на любом пути. Он должен содержать цепочку сертификатов вашего ЦС. Это может быть один файл с простым списком доверенных сертификатов.

Примечание пути зависят от поставщика ldap. Это может быть /etc/ldapили /etc/openldapили так.

Хуан Гарсия
источник