安全 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 進階版支援團隊聯絡,請務必儲存指令輸出內容。請務必先從輸出內容中移除所有個人識別資訊,再與支援團隊分享。

驗證連線及執行 LDAP 查詢

在 Google 管理控制台中設定安全 LDAP 服務後,您可以使用下列三種簡單工具之一,驗證與安全 LDAP 的連線:ldapsearch、ADSI 或 ldp.exe。如需更多詳細資料與操作說明,請參閱以下各節。

ldapsearch

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

如要使用 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})'

搭配 stunnel 使用 ldapsearch

如果部署作業需要使用 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) 必須支援伺服器名稱指示 (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 格式輸入網域名稱 (例如 dc=example,dc=com 代表 example.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」,則輸入 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 服務需要支援並使用 SNI (伺服器名稱指示) 啟動 TLS 工作階段的 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)。