CentOS openLDAP sertifikası güven sorunları


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

opensslsertifikanın iyi olduğunu düşünüyor gibi görünüyor, ama openldapkütüphaneleri ( pam_ldapbenzer davranış sergiliyor, ben bu karmaşaya bu şekilde katıldım) aynı fikirde değil.
Neyi yanlış yapıyorum?

Yanıtlar:


17

RHEL aslında CA güven amaçları için 'sertifika dizini' olarak kullanılabilecek hiçbir şey sağlamaz. OpenSSL için, bir sertifika dizini - 'CApath' - sertifikanın konu adının bir karmasını temel alan belirli bir biçimde adları olan ayrı sertifika dosyaları (PEM biçiminde veya OpenSSL'nin genişletilmiş 'güvenilir sertifika' biçiminde) içeren bir dizindir. Genellikle bu, insanlar tarafından okunabilir adlara ve .pemuzantılara sahip dosyaları bir dizine koyarak ve üzerinde çalışarak elde edilir c_rehash(bkz.man c_rehash). 3.3.6'dan beri GnuTLS için (bundan önce GnuTLS'de dizin desteği yoktu), içinde sadece PEM dosyaları bulunan bir dizin; GnuTLS, dizindeki her dosyayı dener ve yükler ve PEM-ish'de başarılı olur (OpenSSL'nin 'güvenilir sertifika' biçimini işleyemez). Dürüst olmak gerekirse NSS aslında bir şekilde bir kök kök olarak bireysel sertifika dosyaları dolu bir dizin kullanabilirsiniz emin değilim, ancak OpenLDAP'ın belgeleri bunu önermek gibi görünüyor (ancak dizin de bir NSS veritabanı içeriyorsa bu öncelik verecektir). Ne olursa olsun, RHEL'in tek tek CA sertifika dosyalarıyla dolu bir dizini yoktur.

Debian ve türevleri /etc/ssl/certsbu biçimde sağlar; /etc/ssl/certsDebian'daki kanonik güven deposu konumudur ve IMO, Debian'ın 1999'dan beri aşağı yukarı aynı dizini içerdiğinden, temelde Debian'ınki gibi yerleştirmelidir. RHEL'in bir /etc/ssl/certsdizini vardır, ancak bu biçimde değil - hiç bir sertifika dosyası içermez. CA yolu olarak kullanamazsınız. Dürüst olmak gerekirse, RHEL (ve Fedora ve türevleri) üzerinde bu dizin temelde bir tuzaktır. Kullanma. (Bkz. Https://bugzilla.redhat.com/show_bug.cgi?id=572725 ve https://bugzilla.redhat.com/show_bug.cgi?id=1053882neden ilk başta var olduğu ve nasıl düzeltmeye çalıştığım hakkında bir arka plan için). Bence neler olup bittiğinde haklısın, ama nedeninde yanlışsın. OpenLDAP yanlış bir şey yapmaz ve başarısız olmaz çünkü "ca-bundle.trust.crt ... bir Mozilla NSS sertifika / anahtar veritabanıdır" (bunlara denir cert8/9.dbve RHEL'deki key3/4.dbsistem çapında olanlar yaşar /etc/pki/nssdb) sadece başarısız oluyor çünkü /etc/ssl/certs'sertifika dizini' olarak kullanılamıyor.

RHEL, başka bir yerde CApath tarzı bir güven deposu olarak kullanılabilecek hiçbir şey sağlamaz. RHEL'in sistem güven deposu, /etc/pki/tls/certs/ca-bundle.crtve adresinde bulunan tek bir PEM paket dosyası (OpenSSL açısından bir 'CAfile') olarak sağlanır /etc/pki/tls/cert.pem. Ayrıca bulunabilir /etc/ssl/certs/ca-bundle.crtolarak /etc/ssl/certsaslında sadece sembolik bağdır /etc/pki/tls/certs, ama bu konumu kanonik değildir ve gerçekten hiç bir şey tarafından kullanılmamalıdır. RHEL ayrıca OpenSSL'nin 'güvenilir sertifika' biçiminde bir paket de sağlar /etc/pki/tls/certs/ca-bundle.trust.crt.

Anladığınız gibi yapılacak doğru şey, sistemin sağladığı paket dosyasını kullanmaktır. Cevabınız çalışacaktır ancak nedenleri yukarıda belirtilen için, şiddetle tavsiye ediyorum TLS_CACERT=/etc/pki/tls/certs/ca-bundle.crtveya TLS_CACERT=/etc/pki/tls/cert.pemüzerinde TLS_CACERT=/etc/ssl/certs/ca-bundle.crt.

(Bunların hiçbirinde uzaktan yeni bir şey yok, btw, ancak interweb'lerdeki karışıklık yaygın. RH ve türevleri hiçbir zaman sertifika dolu bir dizin sağlamadı. 2000 yılından beri bir paket dosyası sağladılar. 2005 yılında / usr / share / ssl dizininden / etc / pki / tls dizinine taşındı. Debian hem /etc/ssl/certsCApath tarzı bir dizin hem /etc/ssl/certs/ca-certificates.crtde taş çağından beri az ya da çok bir paket dosyası olarak bulundu.)


Bu cevap, detay nedeniyle birçok + 1'i hak ediyor.
Christopher Schultz

10

/etc/ssl/certs/içeren /etc/ssl/certs/ca-bundle.trust.crtbir parçası olarak ca-certificates-2010.63-3.el6_1.5.noarchMozilla NSS sertifika / anahtar veri tabanıdır. Bu dosyanın içine dahil edilmesi, TLS_CACERTDIRdiğer tüm dosyaların yok sayılmasına neden olur.

TLS_CACERTDIR
Ayrı ayrı dosyalarda Sertifika Yetkilisi sertifikaları içeren bir dizinin yolunu belirtir. TLS_CACERT her zaman TLS_CACERTDIR'den önce kullanılır. 'Bu parametre GnuTLS ile yok sayılır.

Mozilla NSS kullanırken, bir Mozilla NSS sertifika / anahtar veritabanı içerebilir. Bir Mozilla NSS sertifika / anahtar veritabanı ve CA sertifika dosyaları içeriyorsa, OpenLDAP sertifika / anahtar veritabanını kullanır ve CA sertifika dosyalarını yoksayar.

Ancak, openldap-2.4.23-26.el6_3.2.i686bu düzgün işlemiyor gibi görünmüyor.

Kısa Yanıt
Kullanımı LDAPTLS_CACERT=/etc/ssl/certs/ca-bundle.crt
(yapılandırma dosyası TLS_CACERT=/etc/ssl/certs/ca-bundle.crt)
Bu dosya tarafından sağlanmıştır ca-certificates-2010.63-3.el6_1.5.noarch.


1

Başkası buna girer; centos 6 openldap ve sssd'de benim için çalışan bu oldu:

notlar: a. Bazı "akıllı çocuklar" sssd TLS / SSL gerektirir yapmaya karar verdi; centos5'ten davranış değişikliği; bu harici sistemler için harikadır; ancak makine kümesine erişilemeyen bir dahili ağa sahip dahili cihazda 300 + düğümünüz olduğunda; bu son derece yararsız bir güvenlik özelliğidir.

b. Dahası, kendi kendine şarkı söyleyen sertifikalar artık işe yaramıyor; denemeye devam edecek

c. Her ne pahasına olursa olsun NSLCD'den kaçının; Eski bayrağı ayarladığımda ve sssd (netgroups; deadlocking syslog, etc ..) yerine kullanıldığında durmak bilmeyen sorunlara boğuldu.

Sssd kullanarak çalışmaya başlayın;

  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
    

Yararsız bir özellik olduğunu söyleyemem. İç saçakların bir tane için düşmesini önlersiniz. Cihazların, istemediğiniz yerlerde trafiğe erişmesini önlersiniz. Bunun işe yaramaz olmasının birkaç nedeni var.
16'da Torxed

40gig-100gig çalıştıran dahili bir ağda mı? Ciddi anlamda? Bir HPC'nin arka ucuna dokunmak için ne kullanacaksınız? Sadece FYI; saniyede 1 gigabayt veri. Zorunlu güvenlik modeli ile ilgili sorun budur ... Tüm son kullanıcılar için genel varsayımlar yapar. Tıpkı sizin yaptığınız gibi ... Özel bir% 100 dahili ağ yürüttüğüm bir modelde; 16 megabayt MTU ve korkunç borular ile; % 100 yararsız. Güvenlik için başka modeller kullanıyoruz ve hareket halindeki verileri şifrelemek için LDAP / TLS'ye güvenmiyoruz.
zerobane

İnternette sıcak bir yazarla öfkelenen bir yarışmaya girmiyorum. Yalnızca saniyede bir konser bastırıyor ve 100-500 ana çalıştırıyorsanız Ama gerçekten burada konuyu görmüyorum. Elbette TLS daha fazla CPU yükü gerektirir, ancak bunu optimize etmenin ve ağı yeniden yapılandırmanın yolları vardır (TLS'den gelen marjinal ek yük bu kadar etkiliyorsa yine de bu gibi sesler gerekebilir). Ayrıca size zorlanmaz, sssdörneğin daha az güvenli bir kütüphane ile gidin .
16'da Torxed

Aşağılayıcı açıklamalar ve saldırılar için bir neden yok; gerçeklere sadık kalalım. Sanırım zorla güvenlik modelini gönderdiniz ya da modeli desteklediniz. Sadece bir FYI; HPC dünyasında% 1-2, muazzam kabul edilir. 100-500 ev sahibi değil; hosts = cpu; 10.000'den fazla ana bilgisayar konuşuyorsunuz. Muhtemelen dallanma kodunu bitireceğiz veya bunun yerine nslcd'ye döneceğiz. "Daha az" güvenli bir model kullanmayla ilgili sorun net grup desteğidir. Ağı optimize etme ve yeniden yapılandırma; lol; sadece lider süper bilgisayar şirketi; emin nasıl yapılacağını bize bildirin ve bize patent göstermek.
zerobane

0

Bu çok yaygın bir sorundur, sizin için bir cevabım olduğunu düşünmeyin.

İlk RHEL Klonlar iki sahip olan ldap.confdosyaları /etc/ldap.confveya RHEL6 kullanımdan kaldırılmıştır ancak kullanabileceğiniz içinde /etc/nslcd.confiçin kimlik doğrulaması artık /etc/openldap/ldap.confiçindir sorgular , bu yüzden ldapsearch, ldapmodify, ldapremovesen pis bir uzun dize istediğiniz her vakit geçirmeye zorunda kalmamak, gerçekten profil bulunuyor ldap komutu çalıştırmak için.

Şimdi bununla birlikte, iki parametreniz var,

  • tls_cacertfile - ca sertifikasını açıkça tanımlayın ve gitmek için iyi olmalısınız
  • tls_cacertdir- bu, çünkü iş olmaz dizine ca sertifika düşmesi ancak ihtiyacı karma edilecek ...

kullandığınızda openssl x509 -hash -noout -in $file , ln -s $file $file.0CA sertifikanız çalışır.

Ayrıca dikkat yapılandırma dosyası HARFLERDEN ise, /etc/openldap/ldap.conf çalışıyorsanız, bunlar çok farklı dosyalardır.

Umarım bu şeyleri temizler.


-1

Gördüğüm her adam sayfasına göre (ama CentOS kullanıcısı değilim) diye bir şey yok LDAPTLS_CACERTDIR. Ayarlanacak doğru değişken TLS_CACERTDIR. Kalıcı olarak /etc/openldap/ldap.confCentOS LDAP kitaplığı yapılandırma dosyasında veya bu yerde tutuyorsa ayarlamalısınız. Ayrıca, CA sertifikalarını aramak için pam-ldap'ın kendisini yapılandırmanız gerekebilir. CentOS bu /etc/pam_ldap.confbence, ve ayarlamak için değişken tls_cacertdir.


Önce dosya yöntemini denedim, ancak kısaltma için kabuk değişkenini kullanmayı seçtim. Eğer varsa okumak adam sayfalarını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

Tabii ki haklısın, kötülerim. Her zaman yapılandırma dosyasını kullandığım için man sayfasının o bölümünü hiç okumadım. Man sayfasını oluşumları için tarıyordum LDAPTLS_CACERTDIRve herhangi bir şey bulamadım, bu yüzden değişkenlerinizi karıştırdığınızı varsaydım. Üzgünüm.
daff
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.