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

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

При попытке установить 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 нет списка надежных эмитентов?

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

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

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

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

  • Если ты с использованием недействительного сертификата, вы можете принудительно принять его настройку /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 или так.