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

รุ่นที่รองรับฟีเจอร์นี้ ได้แก่ Frontline Standard และ Frontline Plus, Business Plus, Enterprise Standard และ Enterprise Plus, Education Fundamentals, Education Standard และ Education Plus, Enterprise Essentials Plus เปรียบเทียบรุ่นของคุณ

ก่อนที่จะลองเชื่อมต่อไคลเอ็นต์ 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 แล้วดาวน์โหลดใบรับรองตามวิธีการในหัวข้อเพิ่มไคลเอ็นต์ LDAP

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

  2. ดำเนินการค้นหา LDAP ตัวอย่างนี้จะค้นหาผู้ใช้ที่ต้องการ (โปรดดูรายละเอียดเพิ่มเติมที่ OpenLDAP ldapsearch)

    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

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

    ldapsearch -H ldaps://ldap.google.com:636 -b dc={domain},dc={domain} -D {ldap_access_credentials_username} -W '(mail={user_email})

  • หากค่า BindDN เป็นอีเมลหรือชื่อเฉพาะ LDAP ของผู้ใช้ Workspace ldapsearch จะใช้ข้อมูลเข้าสู่ระบบของผู้ใช้รายนั้นเพื่อค้นหาตามสิทธิ์ของผู้ใช้

    ldapsearch -H ldaps://ldap.google.com:636 -b dc={domain},dc={domain} -D {workspace_username@domain} -W '(mail={user_email})'

ใช้ ldapsearch กับ stunnel

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

  1. ในคอนโซลผู้ดูแลระบบ ให้สร้างข้อมูลเข้าสู่ระบบเพื่อสร้างชื่อผู้ใช้และรหัสผ่านที่ ldapsearch ต้องการ
  2. ใช้คำสั่งต่อไปนี้

    ldapsearch -x -D "{username}" -w {password} -H ldap://{stunnel_host}:{stunnel_port} -b dc={domain},dc={domain} '(mail={user_email})'

    แทนที่ตัวยึดตำแหน่งดังนี้

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

สถานการณ์ที่ประสบความสำเร็จของคำสั่ง 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. ป้อนการตั้งค่าการเชื่อมต่อต่อไปนี้

    ชื่อ: พิมพ์ชื่อสำหรับการเชื่อมต่อ เช่น Google LDAP
    จุดเชื่อมต่อ: "เลือกหรือพิมพ์ชื่อที่แตกต่างกันหรือบริบทการตั้งชื่อ"
    ป้อนชื่อโดเมนในรูปแบบ DN (เช่น dc=example,dc=com สำหรับ example.com)

    คอมพิวเตอร์: "เลือกหรือพิมพ์โดเมนหรือเซิร์ฟเวอร์"
    ldap.google.com

    ใช้การเข้ารหัสที่ใช้ SSL: เลือก
  4. คลิกขั้นสูง... แล้วป้อนรายละเอียดต่อไปนี้

    ระบุข้อมูลเข้าสู่ระบบ: เลือก
    ชื่อผู้ใช้: ชื่อผู้ใช้ที่เป็นข้อมูลเข้าสู่ระบบจากคอนโซลผู้ดูแลระบบ
    รหัสผ่าน: รหัสผ่านที่เป็นข้อมูลเข้าสู่ระบบจากคอนโซลผู้ดูแลระบบ
    หมายเลขพอร์ต: 636
    โปรโตคอล: LDAP
    การตรวจสอบสิทธิ์การเชื่อมโยงอย่างง่าย: เลือก
  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 (&ast;.pfx;&ast;.p12)
  9. เลือกไฟล์ ldap-client.p12 จากขั้นตอนที่ 2 แล้วคลิก Open จากนั้นคลิก Next
  10. ป้อนรหัสผ่านจากขั้นตอนที่ 2 และคลิก Next
  11. เลือกที่เก็บใบรับรอง Personal คลิกถัดไป แล้วคลิกเสร็จสิ้น
  12. เรียกใช้ Ldp.exe
  13. ไปที่ Connection > Connect...
  14. ป้อนรายละเอียดการเชื่อมต่อดังนี้

    เซิร์ฟเวอร์: ldap.google.com
    พอร์ต: 636
    ไม่มีการเชื่อมต่อ: ยกเลิกการเลือก
    SSL: เลือก
  15. คลิกตกลง
  16. ไปที่ View > Tree
  17. ป้อน DN พื้นฐาน นี่คือชื่อโดเมนในรูปแบบ DN (เช่น dc=example,dc=com สำหรับ example.com)
  18. คลิกตกลง
  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 (การระบุชื่อเซิร์ฟเวอร์)

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

Verify return code: 18 (self signed certificate)

บริการ LDAP ที่ปลอดภัยต้องใช้ไคลเอ็นต์ TLS ที่รองรับและเริ่มเซสชัน TLS โดยใช้ SNI (การระบุชื่อเซิร์ฟเวอร์) หากไคลเอ็นต์ 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