การทดสอบการเชื่อมต่อ LDAP ที่ปลอดภัย

ฟีเจอร์นี้ใช้ได้กับ Cloud Identity รุ่น Premium เปรียบเทียบรุ่นต่างๆ 

ก่อนที่จะลองเชื่อมต่อไคลเอ็นต์ LDAP กับบริการ LDAP ที่ปลอดภัย คุณอาจเลือกทำการทดสอบการเชื่อมต่อง่ายๆ โดยใช้เครื่องมืออย่าง ldapsearch, ADSI หรือ ldp.exe นอกจากนี้ยังใช้เครื่องมือเหล่านี้แก้ปัญหาเมื่อพบข้อผิดพลาดขณะพยายามเชื่อมต่อไคลเอ็นต์ LDAP กับบริการได้อีกด้วย

การทดสอบที่อธิบายไว้ในหัวข้อต่างๆ ด้านล่างจะช่วยให้ทราบว่าคุณมีปัญหาเกี่ยวกับการกำหนดค่าในฝั่งของคุณเองหรือไม่ รวมทั้งบอกข้อความแสดงข้อผิดพลาดที่พบบ่อย และวิธีแก้ไขปัญหาเหล่านั้นที่แนะนำ

บทความนี้ประกอบด้วยหัวข้อต่อไปนี้

หมายเหตุ: หากต้องการติดต่อทีมสนับสนุนของ Google Workspace หรือทีมสนับสนุนของ Cloud Identity Premium ในระหว่างขั้นตอนนี้ โปรดบันทึกเอาต์พุตของคำสั่งเอาไว้ และตรวจสอบให้แน่ใจว่าได้นำข้อมูลส่วนบุคคลที่ระบุตัวบุคคลนั้นได้ออกจากเอาต์พุตก่อนที่จะแชร์ข้อมูลกับทีมสนับสนุน

ยืนยันการเชื่อมต่อและทำการค้นหา LDAP

เมื่อตั้งค่าบริการ LDAP ที่ปลอดภัยในคอนโซลผู้ดูแลระบบของ Google แล้ว คุณจะเลือกใช้เครื่องมือง่ายๆ 3 อย่างเพื่อยืนยันการเชื่อมต่อกับ LDAP ที่ปลอดภัยได้ ซึ่งได้แก่ ldapsearch, ADSI หรือ ldp.exe โปรดดูวิธีการและรายละเอียดในหัวข้อด้านล่าง

ldapsearch

ใช้ยูทิลิตี ldapsearch จากบรรทัดคำสั่งเพื่อสร้างการสืบค้น LDAP พื้นฐาน ผลการค้นหา LDAP ที่ประสบความสำเร็จจะระบุว่าไคลเอนต์ LDAP และเซสชัน TLS และ TCP ที่มีอยู่ทำงานได้ตามปกติ

วิธีทดสอบการเชื่อมต่อกับ ldapsearch

  1. สร้างการกำหนดค่า LDAP แล้วดาวน์โหลดใบรับรองตามวิธีการในหัวข้อ 1. เพิ่มไคลเอ็นต์ LDAP

    หมายเหตุ: หากต้องการลดความซับซ้อนของสภาพแวดล้อมการทดสอบ คุณควรให้มีผู้ใช้อย่างน้อย 1 รายในหน่วยขององค์กรที่อนุญาตให้เข้าถึงไคลเอ็นต์ LDAP
     
  2. ดำเนินการค้นหา LDAP

    คำสั่งต่อไปนี้เป็นตัวอย่างวิธีการใช้เครื่องมือบรรทัดคำสั่ง ldapsearch เพื่อค้นหาผู้ใช้ที่ต้องการ (โปรดดูรายละเอียดเพิ่มเติมที่หน้า OpenLDAP lapsearch)
     

    LDAPTLS_CERT={crt_file} LDAPTLS_KEY={key_file} ldapsearch -H ldaps://ldap.google.com:636 -b dc={domain},dc={domain} '(mail={user_email})'

    ใช้ค่าต่อไปนี้แทนตัวยึดตำแหน่ง

    {crt_file} : ชื่อของไฟล์ .crt
    {key_file} : ชื่อไฟล์ของไฟล์ .key
    {domain} : แต่ละส่วนของชื่อโดเมน เช่น example.com จะกลายเป็น "dc=example,dc=com"
    {user_email} : อีเมลหลักของผู้ใช้ในโดเมน

ใช้ ldapsearch กับ stunnel

หากคุณต้องใช้ stunnel เพื่อให้ระบบใช้งานได้ ให้ใช้คำสั่งต่อไปนี้

ldapsearch -H ldap://{stunnel_host}:{stunnel_port} -b
dc={domain},dc={domain} '(mail={user_email})'

ใช้ค่าต่อไปนี้แทนค่าตัวยึดตำแหน่งของ stunnel
{stunnel_host} : ที่อยู่ IP หรือชื่อโฮสต์ของเครื่องที่ใช้ stunnel ในเครือข่ายของคุณ
{stunnel_port} : พอร์ตที่ stunnel กำลังทำงานหรือตรวจสอบการกำหนดค่า stunnel

สถานการณ์ที่ประสบความสำเร็จของคำสั่ง ldapsearch

เอาต์พุตที่สำเร็จของคำสั่ง ldapsearch จะแสดงรายการผู้ใช้ด้วยอีเมล (ตามที่ระบุเมื่อสร้างไคลเอ็นต์ LDAP) ในรูปแบบ LDIF

เช่น

# extended LDIF
#
# LDAPv3
# base <dc=example,dc=com> with scope subtree
# filter: (objectclass=*)
# requesting: ALL
#

# example.com
dn: dc=example,dc=com
objectClass: top
objectClass: domain
objectClass: dcObject
dc: example

# admin-group, Groups, example.com
dn: cn=admin-group,ou=Groups,dc=example,dc=com
objectClass: top
objectClass: groupOfNames
objectClass: posixGroup
cn: admin-group
displayName: admin-group
description:
gidNumber: 12345
member: uid=admin,ou=Users,dc=example,dc=com
memberUid: admin
googleAdminCreated: FALSE


# example-user, Users, example.com
dn: uid=example-user,ou=Users,dc=example,dc=com
objectClass: top
objectClass: person
objectClass: organizationalPerson
objectClass: inetOrgPerson
objectClass: posixAccount
uid: example-user
googleUid: example-user
posixUid: example-user
cn: example-user
cn: FirstName LastName
sn: FirstName
displayName: FirstName LastName
givenName: FirstName
mail: example-user@example.com
uidNumber: 12345
gidNumber: 12345
homeDirectory: /home/example-user
loginShell: /bin/bash
gecos:

ข้อผิดพลาดที่เป็นไปได้

  • ไคลเอ็นต์ OpenLDAP และ/หรือไลบรารีได้รับการคอมไพล์โดยไม่มีการรองรับ SNI

    ระบบต้องมี SNI (Server Name Indication - การระบุชื่อเซิร์ฟเวอร์) ที่ไคลเอ็นต์ LDAP (ในกรณีนี้คือ OpenLDAP) รองรับ หากไม่มี SNI คุณอาจเห็นข้อผิดพลาดที่คล้ายกับข้อความต่อไปนี้

    SASL/EXTERNAL authentication started

    ldap_sasl_interactive_bind_s: Unknown authentication method (-6)
    additional info: SASL(-4): no mechanism available:

    คำแนะนำ:
    • หากคุณใช้ MacOS ระบบจะเปิดใช้ SASL ตามค่าเริ่มต้นและจะข้ามได้โดยใช้ตัวเลือก "-x"
    • เพิ่มตัวเลือก -d5 ไปที่ ldapsearch แล้วตรวจสอบเอาต์พุตในบรรทัดต่อไปนี้

      TLS certificate verification: depth: 0, err: 18, subject: /OU=No SNI provided; please fix your client.
       
  • ldapsearch แสดงสถานะ 0 (สำเร็จ) แต่ไม่มีผู้ใช้เป็นเอาต์พุต

    การระบุตัวเลือก ldapsearch -x (ใช้การตรวจสอบสิทธิ์ SASL) ด้วยใบรับรองไคลเอ็นต์จะตรวจสอบสิทธิ์ได้สำเร็จ แต่จะไม่แสดงรายการผู้ใช้ในโดเมน

    คำแนะนำ: นำตัวเลือก -x ออกแล้วลองอีกครั้ง

ADSI Edit (สำหรับ Windows)
  1. ทำตามขั้นตอนที่ 1–11 ใน ldp.exe (สำหรับ Windows) เพื่อติดตั้งใบรับรองไคลเอ็นต์
  2. ไปที่ Action > Connect to…
  3. ป้อนการตั้งค่าการเชื่อมต่อดังนี้

    Name: พิมพ์ชื่อสำหรับการเชื่อมต่อ เช่น Google LDAP
    Connection Point: “Select or type a Distinguished Name or Naming Context”
    ป้อนชื่อโดเมนในรูปแบบ DN (ตัวอย่างเช่น dc=example,dc=com สำหรับ example.com)

    Computer: “Select or type a domain or server”
    ldap.google.com

    Use SSL-based Encryption: เลือก
  4. คลิก Advanced... แล้วป้อนรายละเอียดดังนี้

    Specify credentials: เลือก
    Username: ชื่อผู้ใช้ที่เป็นข้อมูลเข้าสู่ระบบจากคอนโซลผู้ดูแลระบบ
    Password: รหัสผ่านที่เป็นข้อมูลเข้าสู่ระบบจากคอนโซลผู้ดูแลระบบ
    Port Number: 636
    Protocol: LDAP
    Simple bind authentication: เลือก
  5. คลิก OK แล้วคลิก OK อีกครั้ง
  6. หากเชื่อมต่อได้แล้ว เนื้อหาไดเรกทอรีใน DN หลักจะปรากฏในแผงด้านขวา
ldp.exe (สำหรับ Windows)
  1. ติดตั้ง OpenSSL
  2. แปลงไฟล์ใบรับรองและคีย์ไปเป็นไฟล์ที่จัดรูปแบบ PKCS12 ไฟล์เดียว ป้อนคำสั่งต่อไปนี้ที่พรอมต์คำสั่ง

    openssl pkcs12 -inkey ldap-client.key -in ldap-client.crt -export -out ldap-client.p12

    ป้อนรหัสผ่านเพื่อเข้ารหัสไฟล์เอาต์พุต
     
  3. ไปที่แผงควบคุม
  4. ในช่องค้นหา ให้ค้นหา "certificate" และคลิก Manage user certificates
  5. ไปที่ Action > All Tasks > Import…
  6. เลือก Current User แล้วคลิก Next
  7. คลิก Browse…
  8. ในรายการแบบเลื่อนลง file type ที่มุมขวาล่างของกล่องโต้ตอบ ให้เลือก Personal Information Exchange (*.pfx;*.p12)
  9. เลือกไฟล์ ldap-client.p12 จากขั้นตอนที่ 2 แล้วคลิก Open จากนั้นคลิก Next
  10. ป้อนรหัสผ่านจากขั้นตอนที่ 2 และคลิก Next
  11. เลือกที่เก็บใบรับรอง Personal คลิก Next จากนั้นคลิก Finish
  12. เรียกใช้ Ldp.exe
  13. ไปที่ Connection > Connect...
  14. ป้อนรายละเอียดการเชื่อมต่อดังนี้

    Server: ldap.google.com
    Port: 636
    Connectionless: ยกเลิกการเลือกไว้
    SSL: เลือกไว้
  15. คลิก OK
  16. ไปที่ View > Tree
  17. ป้อน DN พื้นฐาน ซึ่งเป็นชื่อโดเมนในรูปแบบ DN (ตัวอย่างเช่น dc=example,dc=com สำหรับ example.com)
  18. คลิก OK
  19. หากเชื่อมต่อได้แล้ว เนื้อหาไดเรกทอรีใน DN หลักจะปรากฏในแผงด้านขวา

หากจำเป็น ให้ทดสอบการเชื่อมต่อพื้นฐาน

หากคุณไม่ได้ผลลัพธ์ที่สำเร็จในการยืนยันการเชื่อมต่อและทำการค้นหา LDAP ให้ทำตามวิธีการในส่วนนี้เพื่อการทดสอบการเชื่อมต่อ หาก ldapsearch ไม่แสดงผลลัพธ์ผู้ใช้ตามที่คาดหวังและไม่ได้ระบุชัดเจนว่าเซสชัน TLS ที่ใช้อยู่ทำงานได้สำเร็จ ให้ใช้ไคลเอ็นต์ OpenSSL เพื่อตรวจสอบว่าเลเยอร์เครือข่ายที่ OpenLDAP ใช้อยู่นั้นทำงานได้ตามที่คาดหมาย

วิธีการดำเนินการทดสอบการเชื่อมต่อพื้นฐาน

  1. ติดตั้งยูทิลิตีไคลเอ็นต์ openssl สำหรับระบบปฏิบัติการของคุณ

    ระบบปฏิบัติการ GNU/Linux ส่วนใหญ่จะใช้ชื่อแพ็กเกจ "openssl" โปรดดูรายละเอียดระบบปฏิบัติการอื่นๆ
     
  2.  ทำการเชื่อมต่อด้วยตนเองกับบริการ LDAP ที่ปลอดภัยโดยใช้ไคลเอนต์ openssl ดังนี้

    openssl s_client -connect ldap.google.com:636

    ยืนยันว่าการเจรจา SSL สำเร็จโดยดูว่ามีบรรทัดต่อไปนี้หรือไม่ในส่วนท้ายของเอาต์พุต openssl s_client

    Verify return code: 0 (ok)

ข้อผิดพลาดที่เป็นไปได้

ไคลเอ็นต์/ไลบรารีของ OpenSSL ไม่รองรับ SNI (Server Name Indication)

ในระหว่างการทดสอบการเชื่อมต่อ ระบบอาจแสดงผลเอาต์พุตต่อไปนี้

Verify return code: 18 (self signed certificate)

บริการ LDAP ที่ปลอดภัยต้องใช้ไคลเอ็นต์ TLS ที่รองรับและเริ่มเซสชัน TLS โดยใช้ SNI (Server Name Indication) หากไคลเอนต์ TLS ไม่รองรับ SNI เซิร์ฟเวอร์ TLS (ldap.google.com) จะแสดงผลใบรับรองแบบ Self-signed ซึ่งจะไม่ผ่านการตรวจสอบ CA ในการระบุว่าจำเป็นต้องใช้ SNI

ระบบจะยืนยันการทำงานนี้ได้โดยการตรวจสอบเอาต์พุตของไคลเอ็นต์ OpenSSL สำหรับบรรทัดที่ใกล้กับจุดเริ่มต้นของเอาต์พุตต่อไปนี้

depth=0 OU = "No SNI provided; please fix your client.", CN = invalid2.invalid

สาเหตุของข้อผิดพลาดนี้อาจรวมถึงเวอร์ชัน OpenSSL ที่ไม่รองรับ SNI หรือแอปพลิเคชันที่ใช้ไลบรารี OpenSSL กับ SNI ที่คุณปิดใช้

การเชื่อมต่อถูกปฏิเสธ

หากมีการแสดงผลเอาต์พุตต่อไปนี้โดยที่ {timestamp} เป็นการประทับเวลาของ UNIX ในหน่วยไมโครวินาที แสดงว่าการเชื่อมต่อ TCP กำลังถูกปฏิเสธก่อนการเจรจา TLS จะเริ่มต้นขึ้น

{timestamp}:error:0200206F:system library:connect:Connection refused:crypto/bio/b_sock2.c:110:
{timestamp}:error:2008A067:BIO routines:BIO_connect:connect error:crypto/bio/b_sock2.c:111:connect:errno=111

ปัญหานี้อาจเกิดจากกรณีดังต่อไปนี้

  • ไฟร์วอลล์ระดับแอปพลิเคชันหรือระดับระบบในเครื่องภายใน
  • ไฟร์วอลล์ในเครือข่ายทางกายภาพเดียวกันหรือเครือข่ายอัปสตรีม

หากต้องการตรวจสอบ ให้ใช้ tcptraceroute เพื่อตรวจสอบว่าโฮสต์ใดปฏิเสธการเชื่อมต่อ ตัวอย่างเช่น tcptraceroute ldap.google.com 636

บทความที่เกี่ยวข้อง

ข้อมูลนี้มีประโยชน์ไหม

เราจะปรับปรุงได้อย่างไร
ค้นหา
ล้างการค้นหา
ปิดการค้นหา
เมนูหลัก
6520797444088753631
true
ค้นหาศูนย์ช่วยเหลือ
true
true
true
false
false