บน Ubuntu 20.04 ฉันพบว่าฉันต้องปิดใช้งาน TLS1.3 โดยการตั้งค่า LDAPTLS_CIPHER_SUITE='ปกติ:!VERS-TLS1.3'
เพื่อให้ ldapsearch ทำงานร่วมกับ Google LDAP
ฉันมาที่นี่ได้อย่างไร:
คำสั่ง ldapsearch สนับสนุนการพิมพ์การดีบักที่เพิ่มขึ้นไปยังคอนโซลโดยใช้ -d ดีบักระดับ
ธง. ดีบักระดับ 1 (-d1
) ก็เพียงพอแล้วสำหรับฉัน ระดับการดีบักที่สูงขึ้นจะดูละเอียดและอ่านยาก
คำสั่ง debug อย่างง่ายอาจมีลักษณะดังนี้:
คนจรจัด@โฟกัส:~$ ldapsearch -H ldaps://ldap.google.com:636 -d1
จากที่นี่ฉันเห็นว่าใบรับรองไม่น่าเชื่อถือ:
...
พยายามเชื่อมต่อ:
เชื่อมต่อความสำเร็จ
TLS: peer cert ไม่น่าเชื่อถือหรือถูกเพิกถอน (0x42)
TLS: ไม่สามารถเชื่อมต่อได้: (รหัสข้อผิดพลาดที่ไม่รู้จัก)
...
สิ่งนี้ไม่สมเหตุสมผลเลย ใบรับรองที่ส่งคืนโดย ldap.google.com นั้นถูกต้องและสามารถตรวจสอบกับของฉันได้ /etc/ssl/certs/ca-certificates.crt
โดยใช้ openssl s_client -เชื่อมต่อ ldap.google.com:636 -CAfile /etc/ssl/certs/ca-certificates.crt
แต่ ldapsearch ไม่ไว้วางใจ
ในที่สุดฉันก็เจอ โพสต์นี้ ในรายชื่อส่งเมล OpenLDAP ซึ่งอธิบายว่าปัญหาเกิดจากการที่ SNI ไม่ได้รับการสนับสนุน ซึ่งจะทำให้ Google ส่งคืนใบรับรองที่ลงนามด้วยตนเองที่ไม่ถูกต้อง ฉันไม่พบวิธีแก้ไขที่เหมาะสม แต่วิธีแก้ปัญหาด้านล่างเพื่อปิดใช้งาน TLS1.3 โดยการตั้งค่า LDAPTLS_CIPHER_SUITE
ตัวแปรสภาพแวดล้อมใช้งานได้สำหรับฉันเพราะ OpenLDAP ของฉันใช้ GnuTLS หากคุณใช้ OpenSSL คุณอาจต้องหาวิธีแก้ไขปัญหาอื่น แต่สาเหตุที่แท้จริงยังคงเหมือนเดิม