Problemy z zaufaniem do certyfikatu CentOS openLDAP

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)
---

opensslwydaje się uważać, że certyfikat jest w porządku, ale openldapbiblioteki ( pam_ldapwykazują podobne zachowanie, i tak właśnie dostałem się do tego bałaganu) się nie zgadzają.
Co ja robię źle?

84104
źródło

Odpowiedzi:

17

RHEL w rzeczywistości nie udostępnia niczego, co można by wykorzystać jako „katalog certyfikatów” dla celów zaufania urzędu certyfikacji. W przypadku OpenSSL katalog certyfikatów - „CApath” - to katalog zawierający pojedyncze pliki certyfikatów (w formacie PEM lub rozszerzonym formacie „zaufanego certyfikatu” OpenSSL), z nazwami w określonym formacie opartym na haszu nazwy podmiotu certyfikatu. Zwykle osiąga się to poprzez umieszczenie plików z nazwami i .pemrozszerzeniami czytelnymi dla człowieka w katalogu i uruchomienie c_rehashw nim (patrzman c_rehash). W przypadku GnuTLS od wersji 3.3.6 (wcześniej GnuTLS nie obsługiwał katalogów), jest to tylko katalog z plikami PEM; GnuTLS spróbuje załadować każdy plik w katalogu i odniesie sukces na dowolnym PEM-ie (nie obsługuje formatu „zaufanego certyfikatu” OpenSSL). Nie jestem do końca pewien, czy NSS może w jakiś sposób wykorzystać katalog pełen pojedynczych plików certyfikatów jako katalog główny zaufania, ale dokumentacja OpenLDAP wydaje się sugerować, że może (ale jeśli katalog zawiera również bazę danych NSS, da ten priorytet). Niezależnie od tego, RHEL nie ma czegoś takiego jak katalog pełen pojedynczych plików certyfikatów CA.

Debian i pochodne udostępniają /etc/ssl/certsw tym formacie; /etc/ssl/certsjest kanoniczną lokalizacją magazynu zaufania w Debianie, a IMO wszystko, co ją zapewnia, powinno zasadniczo ją ułożyć tak, jak Debian, ponieważ Debian ma ten katalog ułożony mniej więcej tak samo jak od 1999 roku. RHEL ma /etc/ssl/certskatalog, ale jest w nie w tym formacie - nie zawiera żadnych pojedynczych plików certyfikatów. Nie można go używać jako ścieżki CA. Szczerze mówiąc, na RHEL (i Fedorze i pochodnych) ten katalog jest w zasadzie pułapką. Nie używaj tego. (Zobacz https://bugzilla.redhat.com/show_bug.cgi?id=572725 i https://bugzilla.redhat.com/show_bug.cgi?id=1053882dla niektórych podstaw, dlaczego w ogóle istnieje i jak próbuję to naprawić). Myślę więc, że masz rację co do tego, co się dzieje, ale mylisz się co do przyczyny. OpenLDAP nie robi nic złego i nie zawodzi, ponieważ „ca-bundle.trust.crt ... to baza danych certyfikatów / kluczy Mozilla NSS” (te są nazywane cert8/9.dbi key3/4.db, i systemowe w RHEL na żywo /etc/pki/nssdb) , po prostu zawodzi, ponieważ w /etc/ssl/certsogóle nie nadaje się do „katalogu certyfikatów”.

RHEL nie zapewnia niczego, co mogłoby być użyteczne jako magazyn zaufania w stylu CApath nigdzie indziej. Systemowy magazyn zaufania RHEL jest dostarczany jako pojedynczy plik pakietu PEM („plik CA” w kategoriach OpenSSL), który można znaleźć na stronie /etc/pki/tls/certs/ca-bundle.crti /etc/pki/tls/cert.pem. Można go również znaleźć, /etc/ssl/certs/ca-bundle.crtponieważ /etc/ssl/certsjest to właściwie tylko dowiązanie symboliczne /etc/pki/tls/certs, ale ta lokalizacja nie jest kanoniczna i tak naprawdę nie powinna być używana przez nic. RHEL zapewnia również pakiet w formacie „zaufanego certyfikatu” OpenSSL jako /etc/pki/tls/certs/ca-bundle.trust.crt.

Jak się zorientowałeś, właściwym rozwiązaniem jest użycie pliku pakietu dostarczonego przez system. Twoja odpowiedź zadziała, ale z wyżej wymienionych powodów zdecydowanie polecam TLS_CACERT=/etc/pki/tls/certs/ca-bundle.crtlub TLS_CACERT=/etc/pki/tls/cert.pemprzeskoczę TLS_CACERT=/etc/ssl/certs/ca-bundle.crt.

(Nie ma w tym nic nowego, btw, ale zamieszanie w sieciach jest powszechne. RH i pochodne nigdy nie dostarczyły katalogu pełnego certyfikatów. Dostarczyły plik pakietu od 2000 roku. To był przeniesiony z / usr / share / ssl do / etc / pki / tls w 2005 roku. Debian ma zarówno /etc/ssl/certskatalog w stylu CApath, /etc/ssl/certs/ca-certificates.crtjak i plik pakietu mniej więcej od epoki kamienia łupanego.)

Adam Williamson
źródło
Ta odpowiedź zasługuje na wiele + 1-ek ze względu na szczegóły.
Christopher Schultz
10

/etc/ssl/certs/zawiera /etc/ssl/certs/ca-bundle.trust.crtjako część ca-certificates-2010.63-3.el6_1.5.noarchbazy danych certyfikatów / kluczy Mozilla NSS. Włączenie tego pliku TLS_CACERTDIRpowoduje, że wszystkie inne pliki są ignorowane.

TLS_CACERTDIR
Określa ścieżkę do katalogu zawierającego certyfikaty urzędów certyfikacji w osobnych plikach. TLS_CACERT jest zawsze używany przed TLS_CACERTDIR. Ten parametr jest ignorowany przez GnuTLS.

Podczas korzystania z Mozilla NSS może zawierać bazę danych certyfikatów / kluczy Mozilla NSS. Jeśli zawiera bazę certyfikatów / kluczy Mozilla NSS i pliki certyfikatów CA, OpenLDAP użyje bazy danych cert / key i zignoruje pliki certyfikatów CA.`

Jednak openldap-2.4.23-26.el6_3.2.i686wydaje się , że nie radzi sobie z tym poprawnie.


Zastosowanie krótkiej odpowiedziLDAPTLS_CACERT=/etc/ssl/certs/ca-bundle.crt
(plik konfiguracyjny TLS_CACERT=/etc/ssl/certs/ca-bundle.crt)
Ten plik jest również dołączony przez ca-certificates-2010.63-3.el6_1.5.noarch.

84104
źródło
1

Ktoś inny na to wpadnie; oto, co działało dla mnie na centos 6 openldap i sssd:

uwagi: Niektórzy „inteligentni faceci” postanowili, że sssd wymaga TLS / SSL; zmiana zachowania z centos5; jest to świetne dla systemów zewnętrznych; ale gdy masz ponad 300 węzłów w urządzeniu wewnętrznym z nieosiągalną siecią wewnętrzną do klastra maszyn; jest to niezwykle bezużyteczna funkcja bezpieczeństwa.

b. Co więcej, wydaje się, że certyfikaty samopodpisane już nie działają; będzie kontynuować próbę

do. Unikaj NSLCD za wszelką cenę; był nękany ciągłymi problemami, gdy ustawiłem starszą flagę i użyłem zamiast sssd (netgroups; zakleszczenie syslog itp.).

Aby rozpocząć pracę przy użyciu 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
    
zerobane
źródło
Nie powiedziałbym, że jest to bezużyteczna funkcja. Unikaj wpadania wewnętrznych okapów dla jednego. Unikasz urządzeń, które będą mogły korzystać z ruchu tam, gdzie nie chcesz. Istnieje wiele powodów, dla których nie jest to bezużyteczne.
Torxed
W sieci wewnętrznej działającej 40gig-100gig? Poważnie? Czego zamierzasz użyć do stuknięcia zaplecza HPC? Po prostu FYI; to 1 gigabajt danych na sekundę. To jest problem z modelem wymuszonego bezpieczeństwa ... Robi ogólne założenia dla wszystkich użytkowników końcowych. Tak jak właśnie zrobiłeś ... W modelu, w którym prowadzę własną, w 100% wewnętrzną sieć; z 16-megabajtowymi jednostkami MTU i potwornymi rurami; 100% bezużyteczne. Używamy innych modeli dla bezpieczeństwa i nie polegamy na LDAP / TLS do szyfrowania danych w ruchu.
zerobane
Nie biorę udziału w konkursie sikania z gorącym pisarzem w Internecie. Ale jeśli popychasz tylko gigabajt na sekundę i prowadzisz 100-500 hostów, naprawdę nie widzę tutaj problemu. Jasne, że TLS wymaga większego obciążenia procesora, ale istnieją sposoby na zoptymalizowanie tego i restrukturyzację sieci (brzmi to tak, jakby i tak może być potrzebne, jeśli tak bardzo wpływa na to marginalny narzut z TLS). Nie jest to na ciebie narzucone, idź z mniej bezpieczną biblioteką niż sssdna przykład.
Torxed
Nie ma powodu do uwłaczających uwag i ataków; trzymajmy się faktów. Zgaduję, że przesłałeś model wymuszonego bezpieczeństwa lub wspierałeś model. Po prostu FYI; 1-2% w świecie HPC jest uważane za ogromne. Nie ma 100-500 hostów; jeśli weźmiesz pod uwagę hosty = procesor; mówisz ponad 10 000 hostów. Prawdopodobnie skończymy zamiast tego kod rozgałęzienia lub wrócimy do nslcd. Problem z użyciem „mniej” bezpiecznego modelu polega na obsłudze grup sieciowych. Zoptymalizuj i przebuduj sieć; lol; tylko wiodąca firma superkomputerowa; daj nam znać, jak to zrobić i pokaż nam patent.
zerobane
0

To bardzo częsty problem, nie martw się, mam dla ciebie odpowiedź.

Pierwsze RHEL Klony mają mieć dwa ldap.confpliki, /etc/ldap.conflub w RHEL6 jest jest przestarzała, ale można użyć /etc/nslcd.confdo uwierzytelniania teraz /etc/openldap/ldap.confjest tylko dla zapytań , tak ldapsearch, ldapmodify, ldapremove, to naprawdę Twój profil, dzięki czemu nie trzeba mieć bolesnego długi ciąg każdym razem, gdy chcesz aby uruchomić polecenie ldap.

Teraz, gdy masz to na uboczu, masz dwa parametry,

  • tls_cacertfile - wyraźnie zdefiniuj certyfikat ca i powinieneś być gotowy
  • tls_cacertdir- wrzuć ca ca do katalogu, ale to nie zadziała, ponieważ trzeba go zaszyfrować

użyj openssl x509 -hash -noout -in $file , ln -s $file $file.0, wtedy Twój certyfikat CA będzie działał.

Pamiętaj również, że jeśli plik konfiguracyjny znajduje się w CAPS, pracujesz w /etc/openldap/ldap.conf, są to bardzo różne pliki.

Mam nadzieję, że to wszystko wyjaśni.

side_control
źródło
-1

Według każdej strony podręcznika, którą widziałem (ale nie jestem użytkownikiem CentOS), nie ma czegoś takiego jak LDAPTLS_CACERTDIR. Prawidłowa zmienna do ustawienia to TLS_CACERTDIR. Powinieneś ustawić go na stałe w /etc/openldap/ldap.confkażdym miejscu, w którym CentOS przechowuje plik konfiguracyjny biblioteki LDAP. Konieczne może być również skonfigurowanie samego pam-ldap w celu wyszukiwania certyfikatów urzędu certyfikacji. /etc/pam_ldap.confMyślę, że w CentOS jest to zmienna, którą należy ustawić tls_cacertdir.

daff
źródło
Najpierw spróbowałem metody pliku, ale postanowiłem użyć zmiennej powłoki dla zwięzłości. Jeśli czytasz strony podręcznikaEnvironmental 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,
Oczywiście masz rację, mój zły. Nigdy nie czytałem tej części strony podręcznika, ponieważ zawsze używam pliku konfiguracyjnego. Skanowałem stronę podręcznika w poszukiwaniu wystąpień LDAPTLS_CACERTDIRi nie znalazłem żadnej, więc założyłem, że pomieszałeś swoje zmienne. Przepraszam.
daff