Питання довіри CentT openLDAP cert


12
# LDAPTLS_CACERTDIR=/etc/ssl/certs/ ldapwhoami -x -ZZ -H ldaps://ldap.domain.tld
ldap_start_tls: Can't contact LDAP server (-1)
      additional info: TLS error -8172:Peer's certificate issuer has been marked as not trusted by the user.

# openssl s_client -connect ldap.domain.tld:636 -CApath /etc/ssl/certs
<... successful tls negotiation stuff ...>
    Compression: 1 (zlib compression)
    Start Time: 1349994779
    Timeout   : 300 (sec)
    Verify return code: 0 (ok)
---

opensslздається, думаю, що сертифікат добре, але openldapбібліотеки ( pam_ldapвиявляє подібну поведінку, саме так я і потрапив до цього безладу) не згодні.
Що я роблю неправильно?

Відповіді:


17

RHEL насправді не забезпечує нічого, що може бути використано як "каталог сертифікатів" для цілей довіри CA. Для OpenSSL каталог сертифікатів - "CApath" - це каталог, що містить окремі файли сертифікатів (у форматі PEM або розширеному форматі "довіреного сертифіката" OpenSSL) з іменами у певному форматі, заснованому на хеші імені теми сертифіката. Зазвичай це досягається шляхом розміщення файлів із читаними людьми іменами та .pemрозширеннями в каталозі та запуском c_rehashна ньому (дивman c_rehash). Для GnuTLS з 3.3.6 (до цього GnuTLS не підтримував каталогів), це просто каталог з файлами PEM; GnuTLS буде намагатися завантажувати кожен файл у каталог і досягати успіху у будь-якому PEM-ish (він не може обробляти формат 'довіреного сертифіката' OpenSSL). Я не чесно впевнений, чи дійсно NSS може використовувати каталог, повний окремих файлів сертифікатів, як корень довіри, але документація OpenLDAP, здається, підказує, що може (але якщо каталог також містить базу даних NSS, він надасть цей пріоритет). Незважаючи на те, RHEL не має нічого подібного до каталогу, повної окремих файлів сертифікатів CA.

Debian та похідні продукти надаються /etc/ssl/certsв такому форматі; /etc/ssl/certsце канонічне розташування магазину довіри на Debian, і IMO все, що його забезпечує, в основному має викласти так, як 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.

(Нічого в цьому немає нічого віддаленого, btw, але плутанина в інтервеї є широко поширеною. RH та похідні ніколи не надавали каталог-повний сертифікатів. Вони надавали файл пакету з 2000 року. Це було переміщено з / usr / share / ssl в / etc / pki / tls у 2005 році. Debian /etc/ssl/certsз каменного віку мав як каталог у стилі CApath, так і /etc/ssl/certs/ca-certificates.crtяк файл пакету.)


Ця відповідь заслуговує багатьох багато +1 через деталізацію.
Крістофер Шульц

10

/etc/ssl/certs/містить /etc/ssl/certs/ca-bundle.trust.crtяк частину ca-certificates-2010.63-3.el6_1.5.noarch, яка є серверною / ключовою базою даних Mozilla NSS. Включення цього файлу TLS_CACERTDIRвикликає ігнорування всіх інших файлів.

TLS_CACERTDIR
Вказує шлях до каталогу, який містить сертифікати Органу сертифікації в окремих окремих файлах. TLS_CACERT завжди використовується перед TLS_CACERTDIR.` Цей параметр ігнорується з GnuTLS.

Під час використання Mozilla NSS може містити серверну / ключову базу даних Mozilla NSS. Якщо містить серверну / ключову базу даних Mozilla NSS та файли cert CA, OpenLDAP буде використовувати базу даних cert / key та ігнорувати файли cert CA. "

Однак, openldap-2.4.23-26.el6_3.2.i686схоже , це не справляється належним чином.

Короткий відповідь
Використання LDAPTLS_CACERT=/etc/ssl/certs/ca-bundle.crt
(конфігураційний файл TLS_CACERT=/etc/ssl/certs/ca-bundle.crt)
Цей файл також надано користувачем ca-certificates-2010.63-3.el6_1.5.noarch.


1

Хтось інший натрапляє на це; ось що працювало для мене на centos 6 openldap і sssd:

примітки: а. Деякий «розумний хлопець» вирішив зробити sssd вимагати TLS / SSL; зміна поведінки від centos5; це чудово підходить для зовнішніх систем; але коли у вас є 300 + вузлів на внутрішньому пристрої з недоступною внутрішньою мережею до кластерного апарату; це надзвичайно марна функція безпеки.

б. Крім того, здається, що самостійно засвідчені сертифікати вже не працюють; продовжуватимуть спроби

c. Уникайте NSLCD будь-якою ціною; коли я встановив застарілий прапор і використовувався замість sssd (netgroups; syslog deadlocking тощо), зіткнувся з проблемами non-stop.

Щоб встати та працювати за допомогою sssd;

  1. sssd.conf

    [domain/default]
    ldap_id_use_start_tls = True
    id_provider = ldap
    auth_provider = ldap
    chpass_provider = ldap
    cache_credentials = True
    ldap_search_base = dc=local
    enumerate = True
    ldap_uri = ldap://192.168.1.2/
    ldap_tls_cacertdir = /etc/openldap/cacerts
    ldap_tls_reqcert = allow
    ldap_schema = rfc2307bis
    
  2. slapd.conf

    TLSCACertificateFile   /etc/openldap/cacerts/ca-bundle.crt
    TLSCertificateFile      /etc/openldap/cacerts/slapd.pem
    TLSCertificateKeyFile   /etc/openldap/cacerts/slapd.pem
    TLSCipherSuite HIGH:MEDIUM:-SSLv2
    
  3. ldap.conf

    URI ldap://192.168.1.2/
    BASE dc=local
    
    TLS_CACERTDIR /etc/openldap/cacerts
    

Я б не сказав, що це марна функція. Ви уникаєте того, щоб внутрішні карнизи випадали на один. Ви уникаєте приладів, щоб можна було задіяти трафік там, де цього не хочете. Існує ряд причин, чому це не даремно.
Тортується

У внутрішній мережі працює 40gig-100gig? Серйозно? Що ви збираєтеся використовувати для торкання бекенду HPC? Просто FYI; це 1 гігабайт даних за секунду. Це проблема з форсованою моделлю безпеки ... Це робить узагальнені припущення для всіх кінцевих користувачів. Як ви щойно зробили ... На моделі, де я працюю у фірмовій 100% внутрішній мережі; з 16-мегабайтними MTU та жахливими трубами; 100% марний. Ми використовуємо інші моделі для безпеки і не покладаємось на LDAP / TLS для шифрування даних у русі.
zerobane

Я не потрапляю в пікантний конкурс з гарячим головою письменника в Інтернеті. Але якщо ви тільки натискаєте на концерт і запускаєте 100-500 хостів, я справді не бачу тут проблеми. Звичайно, TLS вимагає більшого завантаження процесора, але є способи оптимізувати це та реструктуризувати мережу (звучить так, що це може знадобитися в будь-якому випадку, якщо граничні накладні витрати від TLS дуже сильно впливають на це). Це також не змусило вас звернутися з менш захищеною бібліотекою, ніж, sssdнаприклад,.
Тортується

Немає причин для зневажливих зауважень та нападів; давайте дотримуватися фактів. Зрозумівши, ви подали модель примусової безпеки або підтримали її. Просто ПІІ; 1-2% у світі HPC вважають приголомшливим. Його не 100-500 хостів; якщо ви вважаєте хостів = процесор; ви говорите 10 000+ господарів. Ми, ймовірно, закінчимо розгалуження коду або повернемось до nslcd. Проблема використання "менш" захищеної моделі - це підтримка мережевих груп. Оптимізація та реструктуризація мережі; Лол; лише провідна суперкомп'ютерна компанія; обов'язково повідомте нам, як це зробити, і покажіть нам патент.
zerobane

0

Це дуже поширена проблема, не біда, у мене є відповідь за тебе.

Перший RHEL Клони мають два ldap.confфайлу, /etc/ldap.confабо в RHEL6 є застарілим , але ви можете використовувати /etc/nslcd.confдля перевірки справжності в даний час /etc/openldap/ldap.confтільки для запитів , так ldapsearch, ldapmodify, ldapremove, це дійсно ваш профіль , так що ви не повинні мати неприємну довгий рядок кожного разу , коли ви хочете запустити команду ldap.

Тепер, якщо це не виходить, у вас є два параметри,

  • tls_cacertfile - чітко визначте категорію, і вам слід добре піти
  • tls_cacertdir- занесіть ca cart в каталог, але він не працюватиме, тому що його потрібно перемикати ...

Використовуйте openssl x509 -hash -noout -in $file , ln -s $file $file.0, тоді ваш сервер CA буде працювати.

Також зверніть увагу, якщо конфігураційний файл знаходиться в CAPS, ви працюєте в /etc/openldap/ldap.conf, вони дуже різні файли.

Сподіваюсь, це все прояснить.


-1

Відповідно до кожної сторінки, яку я бачив (але я не користувач CentOS), такого не існує LDAPTLS_CACERTDIR. Правильна змінна для встановлення є TLS_CACERTDIR. Ви повинні постійно встановлювати його в /etc/openldap/ldap.confбудь-якому місці, де CentOS зберігає файл конфігурації бібліотеки LDAP. Крім того, вам може знадобитися налаштувати pam-ldap для пошуку сертифікатів СА. У CentOS це /etc/pam_ldap.conf, я думаю, і змінна для встановлення є tls_cacertdir.


Спершу я спробував метод файлу, але вирішив використати змінну оболонки для стислості. Якщо ви читаєте сторінки чоловіківEnvironmental variables may also be used to augment the file based defaults. The name of the variable is the option name with an added prefix of LDAP. For example, to define BASE via the environment, set the variable LDAPBASE to the desired value.
84104,

Ви маєте рацію, звичайно, моя погана. Я ніколи не читав цю частину чоловічої сторінки, оскільки завжди використовую файл конфігурації. Я перевіряв сторінку чоловіка на наявність подій LDAPTLS_CACERTDIRі не знайшов жодної, тому припустив, що ви переплутали свої змінні. Вибачте.
daff
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.