ฟีเจอร์นี้ใช้ได้กับ Cloud Identity รุ่น Premium เปรียบเทียบรุ่นต่างๆ
ก่อนที่จะลองเชื่อมต่อไคลเอ็นต์ LDAP กับบริการ LDAP ที่ปลอดภัย คุณอาจเลือกทำการทดสอบการเชื่อมต่อง่ายๆ โดยใช้เครื่องมืออย่าง ldapsearch, ADSI หรือ ldp.exe นอกจากนี้ยังใช้เครื่องมือเหล่านี้แก้ปัญหาเมื่อพบข้อผิดพลาดขณะพยายามเชื่อมต่อไคลเอ็นต์ LDAP กับบริการได้อีกด้วย
การทดสอบที่อธิบายไว้ในหัวข้อต่างๆ ด้านล่างจะช่วยให้ทราบว่าคุณมีปัญหาเกี่ยวกับการกำหนดค่าในฝั่งของคุณเองหรือไม่ รวมทั้งบอกข้อความแสดงข้อผิดพลาดที่พบบ่อย และวิธีแก้ไขปัญหาเหล่านั้นที่แนะนำ
บทความนี้ประกอบด้วยหัวข้อต่อไปนี้
- ยืนยันการเชื่อมต่อและทำการค้นหา LDAP
การทำการค้นหา LDAP ช่วยให้ยืนยันได้ว่าคุณจะเชื่อมต่อกับ LDAP ที่ปลอดภัยและดำเนินการค้นหาได้
- หากจำเป็น ให้ทำการทดสอบการเชื่อมต่อพื้นฐาน
หากทำการค้นหา LDAP ไม่สำเร็จ ให้ทำการทดสอบการเชื่อมต่อพื้นฐานเพื่อทดสอบการเข้าถึงเครือข่ายและการตรวจสอบสิทธิ์
หมายเหตุ: หากต้องการติดต่อทีมสนับสนุนของ Google Workspace หรือทีมสนับสนุนของ Cloud Identity Premium ในระหว่างขั้นตอนนี้ โปรดบันทึกเอาต์พุตของคำสั่งเอาไว้ และตรวจสอบให้แน่ใจว่าได้นำข้อมูลส่วนบุคคลที่ระบุตัวบุคคลนั้นได้ออกจากเอาต์พุตก่อนที่จะแชร์ข้อมูลกับทีมสนับสนุน
ยืนยันการเชื่อมต่อและทำการค้นหา LDAP
เมื่อตั้งค่าบริการ LDAP ที่ปลอดภัยในคอนโซลผู้ดูแลระบบของ Google แล้ว คุณจะเลือกใช้เครื่องมือง่ายๆ 3 อย่างเพื่อยืนยันการเชื่อมต่อกับ LDAP ที่ปลอดภัยได้ ซึ่งได้แก่ ldapsearch, ADSI หรือ ldp.exe โปรดดูวิธีการและรายละเอียดในหัวข้อด้านล่าง
ldapsearchใช้ยูทิลิตี ldapsearch จากบรรทัดคำสั่งเพื่อสร้างการสืบค้น LDAP พื้นฐาน ผลการค้นหา LDAP ที่ประสบความสำเร็จจะระบุว่าไคลเอนต์ LDAP และเซสชัน TLS และ TCP ที่มีอยู่ทำงานได้ตามปกติ
วิธีทดสอบการเชื่อมต่อกับ ldapsearch
- สร้างการกำหนดค่า LDAP แล้วดาวน์โหลดใบรับรองตามวิธีการในหัวข้อ 1. เพิ่มไคลเอ็นต์ LDAP
หมายเหตุ: หากต้องการลดความซับซ้อนของสภาพแวดล้อมการทดสอบ คุณควรให้มีผู้ใช้อย่างน้อย 1 รายในหน่วยขององค์กรที่อนุญาตให้เข้าถึงไคลเอ็นต์ LDAP
- ดำเนินการค้นหา 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
ออกแล้วลองอีกครั้ง
- ทำตามขั้นตอนที่ 1–11 ใน ldp.exe (สำหรับ Windows) เพื่อติดตั้งใบรับรองไคลเอ็นต์
- ไปที่ Action > Connect to…
- ป้อนการตั้งค่าการเชื่อมต่อดังนี้
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: เลือก
- คลิก Advanced... แล้วป้อนรายละเอียดดังนี้
Specify credentials: เลือก
Username: ชื่อผู้ใช้ที่เป็นข้อมูลเข้าสู่ระบบจากคอนโซลผู้ดูแลระบบ
Password: รหัสผ่านที่เป็นข้อมูลเข้าสู่ระบบจากคอนโซลผู้ดูแลระบบ
Port Number: 636
Protocol: LDAP
Simple bind authentication: เลือก
- คลิก OK แล้วคลิก OK อีกครั้ง
- หากเชื่อมต่อได้แล้ว เนื้อหาไดเรกทอรีใน DN หลักจะปรากฏในแผงด้านขวา
- ติดตั้ง OpenSSL
- แปลงไฟล์ใบรับรองและคีย์ไปเป็นไฟล์ที่จัดรูปแบบ PKCS12 ไฟล์เดียว ป้อนคำสั่งต่อไปนี้ที่พรอมต์คำสั่ง
openssl pkcs12 -inkey ldap-client.key -in ldap-client.crt -export -out ldap-client.p12
ป้อนรหัสผ่านเพื่อเข้ารหัสไฟล์เอาต์พุต
- ไปที่แผงควบคุม
- ในช่องค้นหา ให้ค้นหา "certificate" และคลิก Manage user certificates
- ไปที่ Action > All Tasks > Import…
- เลือก Current User แล้วคลิก Next
- คลิก Browse…
- ในรายการแบบเลื่อนลง file type ที่มุมขวาล่างของกล่องโต้ตอบ ให้เลือก Personal Information Exchange (*.pfx;*.p12)
- เลือกไฟล์ ldap-client.p12 จากขั้นตอนที่ 2 แล้วคลิก Open จากนั้นคลิก Next
- ป้อนรหัสผ่านจากขั้นตอนที่ 2 และคลิก Next
- เลือกที่เก็บใบรับรอง Personal คลิก Next จากนั้นคลิก Finish
- เรียกใช้ Ldp.exe
- ไปที่ Connection > Connect...
- ป้อนรายละเอียดการเชื่อมต่อดังนี้
Server: ldap.google.com
Port: 636
Connectionless: ยกเลิกการเลือกไว้
SSL: เลือกไว้
- คลิก OK
- ไปที่ View > Tree
- ป้อน DN พื้นฐาน ซึ่งเป็นชื่อโดเมนในรูปแบบ DN (ตัวอย่างเช่น dc=example,dc=com สำหรับ example.com)
- คลิก OK
- หากเชื่อมต่อได้แล้ว เนื้อหาไดเรกทอรีใน DN หลักจะปรากฏในแผงด้านขวา
หากจำเป็น ให้ทดสอบการเชื่อมต่อพื้นฐาน
หากคุณไม่ได้ผลลัพธ์ที่สำเร็จในการยืนยันการเชื่อมต่อและทำการค้นหา LDAP ให้ทำตามวิธีการในส่วนนี้เพื่อการทดสอบการเชื่อมต่อ หาก ldapsearch ไม่แสดงผลลัพธ์ผู้ใช้ตามที่คาดหวังและไม่ได้ระบุชัดเจนว่าเซสชัน TLS ที่ใช้อยู่ทำงานได้สำเร็จ ให้ใช้ไคลเอ็นต์ OpenSSL เพื่อตรวจสอบว่าเลเยอร์เครือข่ายที่ OpenLDAP ใช้อยู่นั้นทำงานได้ตามที่คาดหมาย
วิธีการดำเนินการทดสอบการเชื่อมต่อพื้นฐาน
- ติดตั้งยูทิลิตีไคลเอ็นต์ openssl สำหรับระบบปฏิบัติการของคุณ
ระบบปฏิบัติการ GNU/Linux ส่วนใหญ่จะใช้ชื่อแพ็กเกจ "openssl" โปรดดูรายละเอียดระบบปฏิบัติการอื่นๆ
-
ทำการเชื่อมต่อด้วยตนเองกับบริการ 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