ปัญหาความน่าเชื่อถือของใบรับรอง 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)
---

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's เนื่องจาก 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 แต่ความสับสนใน interwebs นั้นแพร่หลาย RH และอนุพันธ์ไม่เคยให้ไดเรกทอรีเต็มรูปแบบของใบรับรองเลยทีเดียวพวกเขาได้จัดทำไฟล์บันเดิลมาตั้งแต่ปี 2000 มันเป็น ย้ายจาก / usr / share / ssl เป็น / etc / pki / tls ในปี 2005 Debian มีทั้ง/etc/ssl/certsเป็นไดเรกทอรี CApath-style และ/etc/ssl/certs/ca-certificates.crtเป็นไฟล์บันเดิลมากหรือน้อยตั้งแต่ยุคหิน)


คำตอบนี้สมควรได้รับ +1 จำนวนมากเนื่องจากรายละเอียด
Christopher Schultz

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
ระบุพา ธ ของไดเร็กทอรีที่มีใบรับรอง Certificate Authority ในแต่ละไฟล์แยกกัน TLS_CACERT จะใช้เสมอก่อนที่จะ TLS_CACERTDIR `พารามิเตอร์นี้จะถูกละเว้นด้วย GnuTLS

เมื่อใช้ Mozilla NSS อาจมีฐานข้อมูลใบรับรอง / คีย์ Mozilla NSS หากมีฐานข้อมูลใบรับรอง / คีย์ Mozilla NSS และไฟล์ใบรับรอง CA OpenLDAP จะใช้ฐานข้อมูลใบรับรอง / คีย์และจะเพิกเฉยต่อไฟล์ใบรับรอง CA "

อย่างไรก็ตามopenldap-2.4.23-26.el6_3.2.i686ดูเหมือนจะไม่สามารถจัดการกับสิ่งนี้ได้อย่างถูกต้อง

คำตอบสั้น
ใช้LDAPTLS_CACERT=/etc/ssl/certs/ca-bundle.crt
(ไฟล์ config 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 + โหนดบนอุปกรณ์ภายในที่มีเครือข่ายภายในที่ไม่สามารถเข้าถึงได้ไปยังคลัสเตอร์เครื่อง นี่เป็นคุณลักษณะด้านความปลอดภัยที่ไร้ประโยชน์อย่างยิ่ง

ข นอกจากนี้ใบรับรองที่ลงชื่อด้วยตนเองดูเหมือนจะไม่ทำงานอีกต่อไป จะพยายามต่อไป

ค. หลีกเลี่ยง NSLCD ในทุกค่าใช้จ่าย ถูกรบกวนด้วยปัญหาที่ไม่หยุดยั้งเมื่อฉันตั้งค่าสถานะดั้งเดิมและใช้แทน sssd (netgroups; deadlocking syslog ฯลฯ .. )

ในการเริ่มต้นและใช้งานโดยใช้ 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
    

ฉันจะไม่บอกว่ามันเป็นคุณสมบัติที่ไร้ประโยชน์ คุณหลีกเลี่ยงชายคาภายในทิ้งไว้หนึ่งอัน คุณหลีกเลี่ยงเครื่องใช้ไฟฟ้าเพื่อให้สามารถเข้าถึงการจราจรที่คุณไม่ต้องการ มีสาเหตุหลายประการที่ทำให้สิ่งนี้ไม่ไร้ประโยชน์
Torxed

บนเครือข่ายภายในใช้ 40gig-100gig? อย่างจริงจัง? คุณจะใช้อะไรเพื่อแตะแบ็กเอนด์ของ HPC เพียงแค่ FYI; นั่นคือ 1 กิกะไบต์ของข้อมูลต่อวินาที นี่เป็นปัญหาของรูปแบบความปลอดภัยที่ถูกบังคับ ... มันทำให้สมมติฐานทั่วไปสำหรับผู้ใช้ทุกคน เหมือนที่คุณเพิ่งทำ ... ในแบบจำลองที่ฉันใช้เครือข่ายภายใน 100% ที่เป็นกรรมสิทธิ์ กับ MTU 16 เมกะไบต์และท่อมหึมา; ไร้ประโยชน์ 100% เราใช้รุ่นอื่น ๆ เพื่อความปลอดภัยและไม่พึ่งพา LDAP / TLS เพื่อเข้ารหัสข้อมูลในการเคลื่อนไหว
zerobane

ฉันไม่ได้เข้าร่วมการประกวดพิซซิ่งกับนักเขียนที่มีชื่อเสียงบนอินเทอร์เน็ต แต่ถ้าคุณกำลังเพียงการผลักดันกิ๊กต่อวินาทีและทำงาน 100-500 เจ้าภาพฉันจริงๆไม่เห็นปัญหาที่นี่ แน่ใจว่า TLS ต้องการโหลด CPU มากขึ้น แต่มีวิธีการเพิ่มประสิทธิภาพนี้และปรับโครงสร้างเครือข่าย (เสียงเช่นนี้อาจจำเป็นต้องใช้ต่อไปหากค่าใช้จ่ายส่วนเพิ่มจาก TLS มีผลกระทบกับเรื่องนี้มาก) มันไม่ได้บังคับให้คุณไปด้วยห้องสมุดที่ปลอดภัยน้อยกว่าsssdเช่น
Torxed

ไม่มีเหตุผลสำหรับการพูดเสื่อมเสียและการโจมตี; ช่วยให้ติดกับข้อเท็จจริง จะเดาได้ไหมว่าคุณส่งรูปแบบการรักษาความปลอดภัยที่ถูกบังคับ เพียงแค่ FYI; 1-2% ในโลก HPC นั้นถือว่ายอดเยี่ยมมาก ไม่ใช่โฮสต์ 100-500 หากคุณพิจารณาโฮสต์ = cpu; คุณกำลังพูดถึง 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 - กำหนด ca ใบรับรองอย่างชัดเจนและคุณควรไปได้ดี
  • tls_cacertdir- วางใบรับรอง ca ไว้ในไดเรกทอรี แต่จะไม่ทำงานเนื่องจากจำเป็นต้องแฮช ...

ใช้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 เองเพื่อค้นหา CA certs ใน CentOS นี้คือผมคิดว่าที่และตัวแปรที่จะเป็นชุด/etc/pam_ldap.conftls_cacertdir


ฉันลองวิธีการของไฟล์ก่อน แต่เลือกที่จะใช้ตัวแปรเชลล์เพื่อความกะทัดรัด หากคุณอ่าน man pagesEnvironmental 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

แน่นอนคุณเป็นคนที่ไม่ดีของฉัน ฉันไม่เคยอ่านส่วนหนึ่งของ man page นั้นเพราะฉันมักจะใช้ไฟล์กำหนดค่า ฉันกำลังสแกนหน้า man เพื่อค้นหาLDAPTLS_CACERTDIRและไม่พบสิ่งใดดังนั้นฉันคิดว่าคุณผสมตัวแปรของคุณ ขอโทษ
daff
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.