安全 LDAP 連線能力測試

支援這項功能的版本:Frontline Standard 和 Frontline Plus;Business Plus;Enterprise Standard 和 Enterprise Plus;Education Fundamentals、Education Standard 和 Education Plus;Enterprise Essentials Plus。版本比較

嘗試將 LDAP 用戶端連線至安全 LDAP 服務前,您可以「視需要」使用 ldapsearchADSIldp.exe 等簡易工具執行快速的連線能力測試。如果連線過程中發生錯誤,您也可以使用這些工具來排解問題。

下列各節介紹的測試可幫助您瞭解自己的系統是否有設定方面的問題、協助您熟悉常見的錯誤訊息,並提供解決問題的建議做法。

本文包含下列各節:

注意:如果在測試期間需要與 Google Workspace 支援團隊Cloud Identity 進階版支援團隊聯絡,請務必儲存指令的輸出結果,並將其中的個人識別資訊全部移除,再將輸出結果提供給支援團隊。

驗證連線能力及執行 LDAP 查詢

在 Google 管理控制台設定安全 LDAP 服務後,您可以從 ldapsearchADSIldp.exe 這三種簡易工具中任選一種來驗證與安全 LDAP 連線的能力。如需詳細資料與操作說明,請參閱以下各節。

ldapsearch

在指令列中使用 ldapsearch 公用程式,執行基本 LDAP 查詢。如果成功傳回 LDAP 查詢結果,就表示 LDAP 用戶端、基礎傳輸層安全標準 (TLS) 工作階段和 TCP 連線均為正常運作。

如何使用「ldapsearch」ldapsearch測試連線能力:

  1. 按照「新增 LDAP 用戶端」一文中的操作說明,建立 LDAP 設定並下載憑證。

    注意:如要簡化測試環境,請確認您授予 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 值是 Workspace 使用者的電子郵件地址或 LDAP 辨別名稱,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} :網路中執行 stunnel 的裝置 IP 位址或主機名稱。
    • {stunnel_port} :執行 stunnel 的通訊埠 (可前往 stunnel 設定查看)
    • {user_email}:網域中某使用者的主要電子郵件地址

成功執行 ldapsearch 指令的情況

如果 ldapsearch 指令執行成功,輸出結果會以 LDIF 格式列出使用者及其電子郵件地址 (建立 LDAP 用戶端時指定的地址)。

例如:

# 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

    LDAP 用戶端 (這裡是指「OpenLDAP」OpenLDAP) 必須支援 SNI (伺服器名稱指示)。如果不支援 SNI,系統可能會顯示類似下方的錯誤:

    SASL/EXTERNAL authentication started

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

    建議:
    • 如果您使用的是 MacOS,SASL 會預設為啟用,但您可以利用「-x」選項略過 SASL。
    • -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 編輯 (Windows)

  1. 按照 ldp.exe (Windows) 一節的步驟 1 至 11 安裝用戶端憑證。
  2. 依序點選「動作」>「連線至…」
  3. 輸入下列連線設定:

    名稱:輸入連線名稱,例如「Google LDAP」
    連接點:「選取或輸入辨別名稱或命名內容」
    以 DN 格式輸入您的網域名稱 (假設您的網域為「example.com」,則輸入「dc=example,dc=com」)。

    電腦:「選取或輸入網域或伺服器」
    ldap.google.com

    使用 SSL 型加密:已勾選
  4. 按一下「進階...」,然後輸入下列詳細資料:

    指定憑證:勾選
    使用者名稱:管理控制台的存取憑證使用者名稱
    密碼:管理控制台的存取憑證密碼
    連接埠號碼:636
    通訊協定:LDAP
    簡單繫結驗證:勾選
  5. 按一下「確定」,然後再次按一下「確定」
  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. 在搜尋框中搜尋「憑證」,然後按一下「管理使用者憑證」
  5. 依序前往「動作」>「所有工作」>「匯入…」
  6. 選取「目前使用者」,然後點選「下一步」
  7. 按一下「瀏覽…」
  8. 在對話方塊右下角的「檔案類型」下拉式選單中,選取「個人資訊交換 (*.pfx;*.p12)」
  9. 選取步驟 2 的 ldap-client.p12 檔案,然後依序點選「開啟」和「下一步」
  10. 輸入步驟 2 的密碼,然後點選「下一步」
  11. 選取「個人」憑證存放區,然後依序點選「下一步」和「完成」
  12. 執行 Ldp.exe
  13. 依序前往「連線」>「連線…」
  14. 輸入下列連線詳細資料:

    伺服器:ldap.google.com
    通訊埠:636
    沒有連線:未勾選
    SSL:已勾選
  15. 按一下「確定」
  16. 依序點選「檢視」>「樹狀目錄」
  17. 輸入基準 DN。這是以 DN 格式輸入的網域名稱。(例如,針對「example.com」example.com輸入 dc=example,dc=com)。
  18. 按一下「確定」
  19. 如果連線成功,右側窗格就會顯示基準 DN 的目錄內容。

視需要執行基本連線能力測試

如果您在驗證連線能力及執行 LDAP 查詢後無法獲得成功結果,請按照本節說明測試連線能力。如果 ldapsearch 未成功傳回預期的使用者,也未明確指出基礎 TLS 工作階段已成功,請使用 OpenSSL 用戶端確認 OpenLDAP 所需的網路層是否正常運作。

如何執行基本連線能力測試:

  1. 安裝作業系統適用的 openssl 用戶端公用程式。

    大多數 GNU/Linux 發行版本的套件名稱都是「openssl」。如需其他作業系統的詳細資訊,請參閱這個網頁

  2. 使用 openssl 用戶端,手動連線至安全 LDAP 服務:

    openssl s_client -connect ldap.google.com:636
    

    如果 openssl s_client 輸出結果的結尾出現下列指令列,表示 SSL 交涉成功:

    Verify return code: 0 (ok)
    

可能發生的錯誤

OpenSSL 用戶端/程式庫不支援 SNI (伺服器名稱指示)

在連線能力測試期間,系統可能傳回下列輸出結果:

Verify return code: 18 (self signed certificate)

安全 LDAP 服務需要支援 TLS 的用戶端,並使用 SNI (伺服器名稱指示) 啟動 TLS 工作階段。如果 TLS 用戶端不支援 SNI,TLS 伺服器 (ldap.google.com) 會傳回自行簽署且無法通過 CA 驗證檢查的憑證,指出系統務必支援 SNI。

如要確認這項行為,請檢查 OpenSSL 用戶端輸出結果的開頭附近有無下列指令列:

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

造成這項錯誤的原因可能是某個 OpenSSL 版本不支援 SNI,或某個使用 OpenSSL 程式庫的應用程式明確停用了 SNI。

連線遭拒

如果傳回下列輸出結果 (其中 {timestamp} 是以微秒為單位的 UNIX 時間戳記),表示在 TLS 交涉開始前,系統主動拒絕了 TCP 連線:

{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)。