OpenLDAP не проверяет сертификат TLS - PullRequest
0 голосов
/ 17 января 2019

Я пытаюсь запустить OpenLDAP (2.4.44 на RedHat 7.6) в качестве клиента на существующем сервере LDAP с TLS. Это работает хорошо - слишком хорошо, на самом деле. Мне кажется, что OpenLDAP принимает какой-либо сертификат сервера, а не проверяет его по предоставленным мною CA.

Вот мой файл ldap.conf:

TLS_CACERT /etc/openldap/cacerts/ldap-2019.pem
TLS_REQCERT demand
URI ldaps://ldap.mydomain.com/
BASE ou=people,dc=mydomain,dc=com

# Some optimizations suggested by
# https://sourceforge.net/p/xcat/wiki/Setting_up_LDAP_in_xCAT/
set_cachesize 0 268435456 1
set_lg_regionmax 262144
set_lg_bsize 2097152

Что я хочу сделать, так это то, что OpenLDAP проверяет сертификат для ldaps: //ldap.mydomain.com по списку CA в TLS_CACERT.

Но на самом деле, независимо от того, что я положил в файл TLS_CACERT, openldap, кажется, успешно соединяется, лишь бы он был действительным файлом PEM.

Чего мне не хватает? Есть ли второй список CA, с которыми консультируется OpenLDAP? Я также удалил CA в / etc / pki / tls, на всякий случай.

Подробнее:

ldapsearch -x -uid = somename завершится неудачно, если я удалю файл, указанный в TLS_CACERT. Также происходит сбой, если TLS_CACERT не является допустимым файлом PEM. Это, конечно, ожидаемое поведение, когда клиент не может проверить сертификат TLS:

ldapsearch -x uid=somename
ldap_sasl_bind(SIMPLE): Can't contact LDAP server (-1)

Но если я добавлю совершенно бессмысленный сертификат в файл TLS_CACERT, ldapsearch вернет результат, как если бы сертификат сервера был действительным.

ldapsearch -x uid=somename
# extended LDIF
#
# LDAPv3
# base <ou=people,dc=mydomain,dc=com> (default) with scope subtree
# filter: uid=somename
# requesting: ALL
#

# somename, People, mydomain.com
dn: uid=somename,ou=People,dc=mydomain,dc=com
...

Например, я попытался использовать сертификат для www.google.com в качестве TLS_CACERT. Я ожидал, что это соединение не будет установлено с той же ошибкой «Не удается связаться с сервером LDAP».

Обновление:

Я нашел причину, но не решение. OpenLDAP использует пакет сертификатов в /etc/pki/ca-trust/extracted/pem/tls-ca-bundle.pem. Переименование этого файла приводит к тому, что ldapsearch ведет себя так, как я и ожидал, но, конечно, это неприемлемое решение, поскольку это файл всей системы, а не только для OpenLDAP.

Итак, мой новый вопрос: как мне запретить OpenLDAP использовать этот файл?

Обновление 2:

Для пояснения, это на RedHat 7.6 и OpenLDAP 2.4.44. Я предполагаю, что использование общесистемного пакета CA является модификацией RedHat для стандартного OpenLDAP.

...