ระบบบางระบบไม่สามารถเชื่อมต่อกับ ldap ผ่าน ldaps ได้ แต่ระบบอื่น ๆ สามารถเป็น wildcard cert ได้หรือไม่


15

เมื่อพยายามเชื่อมต่อ ldaps กับเซิร์ฟเวอร์ Novel eDirectory 8.8 ของฉันบางครั้งฉันต้องใส่TLS_REQCERT neverไฟล์ ldap.conf ของเซิร์ฟเวอร์ไคลเอ็นต์ เห็นได้ชัดว่านี่เป็นความคิดที่ไม่ดี

คำสั่งที่ฉันเรียกใช้คือสิ่งนี้ด้วยข้อมูลประจำตัวที่ใช้งานได้จริง ...

ldapsearch -x -H ldaps://ldapserver -b 'ou=active,ou=people,dc=example,dc=org' -D 'cn=admin,dc=example,dc=org' -W "cn=username"

บน Ubuntu 13.10 ทำงานได้ดี

ใน SLES มันใช้งานได้ดี

บน CentOS 6.5 จะส่งคืน:

ldap_sasl_bind(SIMPLE): Can't contact LDAP server (-1)

ตอนนี้ใบรับรองที่ฉันนำเข้าคือใบรับรองตัวแทนที่ซื้อจาก DigiCert เพื่อนร่วมงานของฉันพบว่ามีรายงานบางฉบับระบุว่าบางระบบมีปัญหากับสัญลักษณ์แทน

ดังนั้นไวลด์การ์ดจะตำหนิหรือไม่? ถ้าเป็นเช่นนั้นฉันจะแก้ไขได้อย่างไร

ถ้าไม่ใช่ไวด์การ์ดรับรองแล้วมันคืออะไร?

ปฏิบัติตามคำแนะนำของ Andrew Schulman ฉันเพิ่ม-d1คำสั่ง ldapsearch ของฉัน นี่คือสิ่งที่ฉันลงเอยด้วย:

ldap_url_parse_ext(ldaps://ldap.example.org)
ldap_create
ldap_url_parse_ext(ldaps://ldap.example.org:636/??base)
Enter LDAP Password: 
ldap_sasl_bind
ldap_send_initial_request
ldap_new_connection 1 1 0
ldap_int_open_connection
ldap_connect_to_host: TCP ldap.example.org:636
ldap_new_socket: 3
ldap_prepare_socket: 3
ldap_connect_to_host: Trying 10.225.0.24:636
ldap_pvt_connect: fd: 3 tm: -1 async: 0
TLS: certdb config: configDir='/etc/openldap' tokenDescription='ldap(0)' certPrefix='cacerts' keyPrefix='cacerts' flags=readOnly
TLS: cannot open certdb '/etc/openldap', error -8018:Unknown PKCS #11 error.
TLS: could not get info about the CA certificate directory /etc/openldap/cacerts - error -5950:File not found.
TLS: certificate [CN=DigiCert High Assurance EV Root CA,OU=www.digicert.com,O=DigiCert Inc,C=US] is not valid - error -8172:Peer's certificate issuer has been marked as not trusted by the user..
TLS: error: connect - force handshake failure: errno 2 - moznss error -8172
TLS: can't connect: TLS error -8172:Peer's certificate issuer has been marked as not trusted by the user..
ldap_err2string
ldap_sasl_bind(SIMPLE): Can't contact LDAP server (-1)

CentOS ไม่เชื่อถือ DigiCert CentOS หรือไม่มีรายชื่อ บริษัท ที่น่าเชื่อถือ?


1
"ไม่สามารถติดต่อเซิร์ฟเวอร์ LDAP" ได้ฟังดูราวกับว่าเซิร์ฟเวอร์ไม่สามารถเข้าถึงได้จากเครื่องไคลเอ็นต์ คุณได้ตรวจสอบก่อนว่าคุณสามารถเชื่อมต่อกับมันได้หรือไม่? เช่นหรือtelnet ldapserver ldaps openssl s_client -connect ldapserver:636
Richard E. Silverman

ใช่ฉันยืนยันแล้วว่าสามารถเชื่อมต่อกับเซิร์ฟเวอร์ได้ ท้ายที่สุดมันจะไม่ทำงานเลยถ้ามันไม่สามารถเชื่อมต่อได้เลย
David R.

คุณพูดถึงสามโฮสต์ลูกค้าที่แตกต่างกัน อันที่ไม่ทำงานอาจไม่สามารถเชื่อมต่อได้เนื่องจากปัญหาด้านเครือข่ายในขณะที่คนอื่น ๆ ทำได้
Richard E. Silverman

ฉันคิดว่าโพสต์ของฉันค่อนข้างชัดเจนว่าฉันแก้ไขไฟล์ ldap.conf บนโฮสต์ทั้งหมด เช่นเดียวกับเมื่อฉันเพิ่มบรรทัดลงในไฟล์มันทำงานได้ แต่ไม่มีบรรทัดมันก็ไม่ได้ ดังนั้นไม่ใช่ปัญหาการเชื่อมต่อ
David R.

นั่นไม่ชัดเจนสำหรับฉันเมื่อฉันอ่านโพสต์ของคุณในตอนแรกแม้ว่าฉันจะเห็นสิ่งที่คุณหมายถึงตอนนี้ อย่างไรก็ตามข้อมูลการดีบัก TLS ที่คุณเพิ่มเข้ามาจะแสดงปัญหา ฉันได้เพิ่มคำตอบเพื่อติดตาม
Richard E. Silverman

คำตอบ:


9

ldapsearch กำลังค้นหาใน / etc / openldap / cacerts เพื่อเก็บใบรับรอง CA ที่เชื่อถือได้และเห็นได้ชัดว่าไม่ได้ตั้งค่าดังนั้นจึงเป็นการปฏิเสธใบรับรองเนื่องจากไม่สามารถสร้างเชนที่เชื่อถือได้ หาก ldapsearch กำลังใช้ OpenSSL มันจะต้องมีการรวบรวมรูปแบบ "hashdir" ตามที่ผลิตโดยเช่นโปรแกรม "authconfig" Red Hat หรือไฟล์เดียวที่มีรายการใบรับรองที่เชื่อถือได้ การอ้างอิงที่นี่เพื่อ "moznss" แสดงให้เห็นว่า ldapsearch นี้สร้างขึ้นสำหรับ Mozilla NSS ซึ่งในกรณีนี้คุณต้องใช้ "certutil" เพื่อสร้างใบรับรอง db (หรือดีกว่าให้ชี้ไปที่ระบบจัดเก็บใบรับรอง NSS หากมี) .

ในระบบที่ใช้งานได้ ldapsearch ต้องมีที่เก็บใบรับรองที่ใช้งานได้อาจเป็นเพราะแพ็คเกจ OpenLDAP นั้นสร้างขึ้นจาก OpenSSL แทน (หรืออาจมีที่เก็บรูปแบบ NSS ที่ใช้งานได้)


2
อา. /etc/openldap/certsเป็นที่เก็บใบรับรอง ไม่ใช่ cacerts ใน /etc/openldap/ldap.conf ฉันเปลี่ยนTLS_CACERTDIR /etc/openldap/cacertsเป็นTLS_CACERTDIR /etc/openldap/certsและคำสั่ง ldapsearch ของฉันเริ่มทำงาน ขอบคุณ!
David R.

ฉันมี ldapsearch ติดตั้งบน Ubuntu 16.04 และไม่มีไดเรกทอรี / etc / openldap
vcardillo

13

ldapsearch จะพูดว่า "ไม่สามารถติดต่อเซิร์ฟเวอร์ LDAP" หากไม่สามารถตรวจสอบใบรับรอง TLS ได้ เพิ่ม-d1ในคำสั่ง ldapsearch ของคุณและตรวจสอบบรรทัดเอาต์พุตที่ขึ้นต้นด้วย "TLS:" เพื่อรับข้อมูลเพิ่มเติมเกี่ยวกับว่าการเชื่อมต่อ TLS ล้มเหลวหรือไม่และทำไม


ฉันแก้ไขคำถามตามคำแนะนำของคุณ ขอบคุณ!
David R.

8

โซลูชันขึ้นอยู่กับการติดตั้งของคุณ:

  • หากคุณกำลังใช้ใบรับรองที่ไม่ถูกต้องคุณสามารถบังคับให้ยอมรับการกำหนดค่า/etc/openldap/ldap.confด้วย

    TLS_REQCERT allow
    

    หรือ

    TLS_REQCERT never
    
  • หากคุณกำลังใช้ใบรับรองที่ถูกต้องอาจเป็นการติดตั้ง ldap ของคุณไม่ทราบว่าที่เก็บใบรับรอง CA ที่เชื่อถือได้นั้นอยู่ที่ใด (ขึ้นอยู่กับการติดตั้ง OpenSSL ของคุณ) จากนั้นคุณสามารถลองตั้งค่าตำแหน่งและตรวจสอบการตั้งค่า/etc/openldap/ldap.confด้วย

    TLS_CACERT /etc/openldap/cacert
    TLS_REQCERT demand
    

    /etc/openldap/cacertสามารถเป็นหรืออยู่ในเส้นทางใดก็ได้ มันจะต้องมีห่วงโซ่ใบรับรองของ CA ของคุณ สามารถเป็นไฟล์เดียวที่มีรายการใบรับรองที่เชื่อถือได้

พา ธ หมายเหตุขึ้นอยู่กับผู้ให้บริการ ldap มันอาจจะเป็น/etc/ldapหรือ/etc/openldapหรือดังนั้น

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