На самом деле RHEL не предоставляет ничего, что можно было бы использовать в качестве «каталога сертификатов» для целей доверия CA. Для OpenSSL каталог сертификатов - «CApath» - это каталог, содержащий отдельные файлы сертификатов (в формате PEM или расширенном формате «доверенный сертификат» OpenSSL) с именами в определенном формате на основе хэша имени субъекта сертификата. Обычно это достигается помещением файлов с удобочитаемыми именами и расширениями .pem
в каталог и запуском в нем c_rehash
(см. man c_rehash
). Для GnuTLS, начиная с версии 3.3.6 (до этого в GnuTLS не было поддержки каталогов), это просто каталог с файлами PEM в нем; GnuTLS попытается загрузить каждый файл в каталоге и преуспеет во всем, что касается PEM (он не может обрабатывать формат «доверенного сертификата» OpenSSL). Я не совсем уверен, может ли NSS действительно использовать каталог, полный отдельных файлов сертификатов, в качестве доверенного корня, но документация OpenLDAP, похоже, предполагает, что это возможно (но если каталог также содержит базу данных NSS, он предоставит этот приоритет). Тем не менее, в RHEL нет ничего похожего на каталог, полный отдельных файлов сертификатов CA.
Debian и его производные предоставляют / etc / ssl / certs
в этом формате; / etc / ssl / certs
- это каноническое расположение хранилища доверенных сертификатов в Debian, и ИМО все, что его предоставляет, должно в основном располагаться как в Debian, поскольку в Debian этот каталог был расположен более или менее таким же образом, поскольку как и 1999. RHEL имеет каталог / etc / ssl / certs
, но он находится не в этом формате - он вообще не содержит каких-либо отдельных файлов сертификатов. Вы не можете использовать его как CApath. Честно говоря, в RHEL (и Fedora, и производных) этот каталог в основном является ловушкой. Не используйте это. (См. https://bugzilla.redhat.com/show_bug.cgi?id=572725 и https://bugzilla.redhat.com/show_bug.cgi?id=1053882 для некоторая предыстория о том, почему он вообще существует, и как я пытаюсь его исправить). Так что я думаю, что вы правы в том, что происходит, но ошибаетесь в отношении причины. OpenLDAP не делает ничего плохого и не дает сбоев, потому что «ca-bundle.trust.crt ... это база данных сертификатов / ключей Mozilla NSS» (они называются cert8 / 9.db
и key3 / 4.db
, а общесистемные на RHEL находятся в / etc / pki / nssdb
), это просто не удается, потому что / etc / ssl / certs
вообще не может использоваться как «каталог сертификатов».
RHEL также не предоставляет ничего, что можно было бы использовать в качестве хранилища доверенных сертификатов в стиле CApath где-либо еще. Хранилище доверенных сертификатов системы RHEL предоставляется в виде одного файла пакета PEM («CAfile» в терминах OpenSSL), который можно найти по адресу /etc/pki/tls/certs/ca-bundle.crt
и ] /etc/pki/tls/cert.pem
. Его также можно найти по адресу /etc/ssl/certs/ca-bundle.crt
, поскольку / etc / ssl / certs
на самом деле просто символическая ссылка на / etc / pki / tls / certs
, но это расположение не является каноническим и действительно не должно использоваться ничем. RHEL также предоставляет пакет в формате «доверенного сертификата» OpenSSL как /etc/pki/tls/certs/ca-bundle.trust.crt
.
Правильное решение, как вы поняли, - использовать файл пакета, который предоставляет система. Ваш ответ будет работать, но по причинам, указанным выше, я настоятельно рекомендую TLS_CACERT = / etc / pki / tls / certs / ca-bundle.crt
или TLS_CACERT = / etc / pki / tls /cert.pem
вместо TLS_CACERT = / etc / ssl / certs / ca-bundle.crt
.
(Между прочим, нет ничего отдаленно нового в этом, но путаница в переплетениях есть RH и его производные никогда не предоставляли каталог, полный сертификатов. Они предоставляют файл пакета с 2000 года. Он был перемещен из / usr / share / ssl в / etc / pki / tls в 2005 году. В Debian были как / etc / ssl / certs
в качестве каталога в стиле CApath, так и /etc/ssl/certs/ca-certificates.crt
как файл пакета более или менее с тех пор, как каменный век.)
Судя по каждой странице руководства, которую я видел (но я не пользователь CentOS), не существует такой вещи, как LDAPTLS_CACERTDIR
. Правильная переменная для установки - TLS_CACERTDIR
. Вы должны установить его навсегда в /etc/openldap/ldap.conf
или в другом месте, где CentOS хранит файл конфигурации библиотеки LDAP. Кроме того, вам может потребоваться настроить сам pam-ldap для поиска сертификатов CA. В CentOS это /etc/pam_ldap.conf
, я думаю, а устанавливаемая переменная - tls_cacertdir
.
/etc/ssl/certs/
contains /etc/ssl/certs/ca-bundle.trust.crt
as part of ca-certificates-2010.63-3.el6_1.5.noarch
, which is a Mozilla NSS cert/key database. Inclusion of this file within TLS_CACERTDIR
causes all other files to be ignored.
TLS_CACERTDIR
Specifies the path of a directory that contains Certificate Authority certificates in separate individual files. The TLS_CACERT is always used before TLS_CACERTDIR.` This parameter is ignored with GnuTLS.When using Mozilla NSS, may contain a Mozilla NSS cert/key database. If contains a Mozilla NSS cert/key database and CA cert files, OpenLDAP will use the cert/key database and will ignore the CA cert files.`
However, openldap-2.4.23-26.el6_3.2.i686
doesn't seem to handle this properly.
Short Answer
Use LDAPTLS_CACERT=/etc/ssl/certs/ca-bundle.crt
(config file TLS_CACERT=/etc/ssl/certs/ca-bundle.crt
)
This file is also included provided by ca-certificates-2010.63-3.el6_1.5.noarch
.
Это очень распространенная проблема, не волнуйтесь, у меня есть для вас ответ.
Первые клоны RHEL имеют два файла ldap.conf
,
/etc/ldap.conf
или в RHEL6 устарел, но теперь вы можете использовать /etc/nslcd.conf
для аутентификации
/etc/openldap/ldap.conf
предназначен только для запросов , поэтому ldapsearch
, ldapmodify
, ldapremove
, это на самом деле ваш профиль, поэтому вам не нужно создавать неприятную длинную строку каждый раз, когда вы хотите запустить команду ldap.
Теперь, когда это решено, у вас есть два параметра,
tls_cacertfile
- явно определите сертификат CA, и вы должны быть готовы пойти tls_cacertdir
- перетащите сертификат CA в каталог, но это не сработает, потому что требует хеширования ... используйте openssl x509 -hash -noout -in $ file, ln -s $ file $ file.0
, тогда ваш сертификат CA будет работать.
Также примечание , если файл конфигурации находится в CAPS, вы работаете в /etc/openldap/ldap.conf, это очень разные файлы.
Кто-нибудь еще сталкивается с этим; это то, что работало для меня на centos 6 openldap и sssd:
notes: a. Какой-то "умник" решил заставить sssd требовать TLS/SSL; поведение изменилось с centos5; это отлично подходит для внешних систем; но когда у вас 300+ узлов на внутреннем устройстве с недоступной внутренней сетью к машинному кластеру, это крайне бесполезная функция безопасности.
b. Более того, самораспеваемые сертификаты, похоже, больше не работают; продолжим попытки
c. Избегайте NSLCD любой ценой; был завален проблемами нон-стоп, когда я установил флаг наследия и использовал вместо sssd (netgroups; deadlocking syslog, и т.д...)
Чтобы начать работу с помощью sssd;
sssd.conf
.[domain/default]
ldap_id_use_start_tls = истинно
id_provider = ldap
auth_provider = ldap
chpass_provider = ldap
cache_credentials = True
ldap_search_base = dc=local
перечислить = Верно
ldap_uri = ldap://192.168.1.2/
ldap_tls_cacertdir = /etc/openldap/cacerts
ldap_tls_reqcert = разрешить
ldap_schema = rfc2307bis
slapd.conf
TLSCACACertificateFile /etc/openldap/cacerts/ca-bundle.crt
TLSCertificateFile /etc/openldap/cacerts/slapd.pem
TLSCertificateKeyFile /etc/openldap/cacerts/slapd.pem
TLSCipherSuite HIGH:MEDIUM:-SSLv2
ldap.conf
URI ldap://192.168.1.2/
БАЗА dc=локальный
TLS_CACERTDIR /etc/openldap/cacerts