Здравствуйте! Чтобы правильно настроить TLS-сессию, нужно немного знать о сертификатах и процессе доверия. В двух словах об этом не расскажешь, если интересно, можно почитать
этот материал.
По существу Вашего вопроса. Сначала нужно разобраться, как был сгенерирован сертификат для Вашего LDAP-сервера. В настройках LDAP-сервера есть атрибут olcTLSCACertificateFile, значением которого должен быть путь к сертификату удостоверяющего центра, закрытым ключом которого подписан сертификат LDAP-сервера. То есть ситуация может быть двоякая:
Первый вариант: у Вас уже был корневой сертификат и закрытый ключ удостоверяющего центра, и Вы с их помощью подписали сертификат для сервера LDAP. В этом случае в атрибуте olcTLSCertificateFile указывается путь к сертификату сервера LDAP, а в атрибуте olcTLSCACertificateFile -- путь к сертификату удостоверяющего центра, с помощью которого можно удостовериться в действительности сертификата сервера LDAP.
Второй вариант: Вы сгенерировали так называемый "самоподписанный" сертификат для сервера LDAP, то есть сертификат, подписанный своим же закрытым ключом. В этом случае в обоих атрибутах olcTLSCertificateFile и olcTLSCACertificateFile указывается путь к сертификату сервера, поскольку он его помощью проверяется действительность самого себя.
В любом случае, в атрибуте olcTLSCACertificateFile указывается именной файл сертификата, а не файл ключа (у Вас же, скорее всего, там указан файл закрытого ключа).
Далее, чтобы LDAP-клиент смог проверить действительность сертификата сервера, он должен знать где получить файл сертификата удостоверяющего центра, закрытым ключом которого подписан сертификат LDAP-сервера. То есть, в
настройках LDAP-клиента (/etc/ldap/ldap.conf) должна быть задана как минимум директива TLS_CACERT, в которой при первом рассмотренном нами варианте указывается путь к сертификату удостоверяющего центра, а при втором -- путь к самому сертификату сервера LDAP.
Потом, когда Вы вызываете команду ldapsearch с параметрами ZZ, Вы указываете LDAP-клиенту подключиться к порту 389, а затем выполнить операцию StartTLS. А при вызове openssl s_client пытаетесь подключиться к порту 636. С какими параметрами запущен Ваш сервер slapd (вывод команды
ps ax | grep slapd)?
Наконец, для проверки действительности сертификата, при подключении к серверу нужно указывать то имя, которое фигурирует в атрибуте CN сертификата. То есть в первом нашем случае (с отдельным сертификатом удостоверяющего центра) вызов команды openssl s_client должен выглядеть так:
# openssl s_client -connect ldapsrv.domain.lan:636 -CAfile /etc/ldap/ssl/rootca.crt
(в последнем параметре нужно указать правильный путь к сертификату удостверяющего центра).
Во втором так:
# openssl s_client -connect ldapsrv.domain.lan:636 -CAfile /etc/ldap/ssl/ldapsrv.domain.lan.crt
Как видите, тонкостей много и затык может быть в любом месте. Надеюсь, мои замечания наведут на нужные мысли.
Егор