Я пытаюсь настроить SSL с сервером, на котором запущен OpenLDAP (и использую OpenSSL, а не GnuTLS).
Сервер работает нормально: я могу пройти аутентификацию, используя ldap://
а также можно использовать ldaps://
из Apache Directory Studio. Я также могу использовать LDAPS из клиента, если у меня есть этот параметр в /etc/ldap.conf:
tls_checkpeer no
Как только я попробую использовать tls_checkpeer yes
в SSL-соединении отказано.
У меня на сервере следующие настройки:
olcTLSCACertificateFile /etc/ssl/certs/cacert.pem
olcTLSCertificateFile /etc/ssl/private/newcert.pem
olcTLSCertificateKeyFile /etc/ssl/private/newreq.pem
У клиента есть эти связанные записи:
# ssl on
uri ldaps://192.168.1.15
tls_checkpeer no
# tls_cacertdir /etc/ssl/certs
# tls_cacertfile /etc/ssl/certs/cacert.pem
Файл /etc/ssl/certs/cacert.pem доступен пользователям для чтения. С приведенной выше конфигурацией это работает. Если я раскомментирую один из двух прокомментированных tls_*
записи конфигурации и измените на tls_checkpeer yes
это не удается.
Я пробовал использовать как cacert.pem, так и newcert.pem для сертификата (tls_cacertfile
), и это не сработало. У cacert.pem есть -----BEGIN CERTIFICATE-----
раздел, как и newcert.pem.
Однако у cacert.pem это под X509v3 extensions
:
X509v3 Basic Constraints:
CA:TRUE
... и файл newcert.pem имеет это в том же разделе:
X509v3 Basic Constraints:
CA:FALSE
Netscape Comment:
OpenSSL Generated Certificate
В других сертификатах в / etc / ssl / certs нет ничего, кроме блока, отмеченного BEGIN CERTIFICATE
.
Используя эту команду:
openssl s_client -connect 192.168.6.144:636 -showcerts
Я вижу, что содержимое cacert.pem и newcert.pem используется для сеанса.
Я не вносил изменений в /etc/ldap/ldap.conf ни на клиенте, ни на сервере.
К ошибкам клиента относятся:
Feb 8 14:32:24 foo nscd: nss_ldap: could not connect to any LDAP server as cn=admin,dc=example,dc=com - Can't contact LDAP server
Feb 8 14:32:24 foo nscd: nss_ldap: failed to bind to LDAP server ldaps://bar: Can't contact LDAP server
Feb 8 14:32:24 foo nscd: nss_ldap: could not search LDAP server - Server is unavailable
На сервере нет специальных записей в журнале. Клиент - Ubuntu Lucid Lynx 10.04, как и сервер. Все используют nscd.
Попытка воспроизвести проблему в системе Red Hat Enterprise Linux 5.7 терпит неудачу в обратном направлении: что-то, что, вероятно, должно было потерпеть неудачу, не дает: tls_checkpeer yes
с пустым tls_cacertdir
каталог. Мне нужен SSL для работы в обеих системах; у нас есть смесь Ubuntu и RHEL.
Я перезапускал nscd после каждого изменения конфигурации.
Вот мои актуальные вопросы:
tls_checkpeer
вариант рабочий? (главный вопрос)ssl on
собственно что делать на клиенте?Спасибо.
И на клиенте, и на сервере попробуйте добавить следующее в /etc/ldap/ldap.conf
TLS_REQCERT never
Кстати, похоже, что в openldap SSL устарел, и лучше использовать TLS. Видеть http://httpd.apache.org/docs/2.2/mod/mod_ldap.html найдите "OpenLDAP SDK". Конфигурация такая же, за исключением того, что вы будете использовать порт 389 и не будете использовать "ldaps: //" в uri.