安全 LDAP 连接测试

支持此功能的版本:一线员工标准版和一线员工 Plus 版;商务 Plus 版;企业标准版和企业 Plus 版;教育基础版、教育标准版和教育 Plus 版;企业基本功能 Plus 版。 版本对比

在尝试将 LDAP 客户端连接到安全 LDAP 服务之前,您可以选择使用 ldapsearchADSIldp.exe 等简单工具快速进行一次连接测试。如果您在尝试将 LDAP 客户端连接到该服务时遇到错误,也可以使用这些工具进行问题排查。

通过下文各节中介绍的测试,您可以检查自己的配置是否有问题,了解常见的错误消息,并获得关于如何解决这些问题的建议。

本文包含以下部分:

注意:如果您在此过程中需要与 Google Workspace 支持团队Cloud Identity 专业版支持团队联系,请务必保存命令的输出结果。在向支持团队提供输出结果前,请务必先移除其中的所有个人身份信息。

验证连接并运行 LDAP 查询

在 Google 管理控制台中设置安全 LDAP 服务后,您可以使用 ldapsearchADSIldp.exe 这三种简单工具中的一种来验证与安全 LDAP 的连接。有关详细信息和操作说明,请参阅以下各部分。

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})'

将 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)必须支持 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. 依次前往 Action(操作)> Connect to…(连接到…)
  3. 输入以下连接设置:

    名称:输入连接名称,例如 Google LDAP
    连接点:“选择或输入标识名或命名上下文”
    输入您的域名(采用 DN 格式,例如 example.com 的 DN 为 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. 在搜索框中,搜索“certificate”(证书),然后点击 Manage user certificates(管理用户证书)。
  5. 依次前往 Action(操作)> All Tasks(所有任务)> Import…(导入…)
  6. 选择现有用户,然后点击下一步
  7. 点击 Browse…(浏览…)。
  8. 在对话框右下角的“File type”(文件类型)下拉列表中,选择 Personal Information Exchange (&ast;.pfx;&ast;.p12)(个人信息交换证书文件 (&ast;.pfx;&ast;.p12))。
  9. 选择第 2 步中的 ldap-client.p12 文件,点击打开,然后点击下一步
  10. 输入在第 2 步获取的密码,然后点击 Next(下一步)。
  11. 选择 Personal(个人)证书存储区,点击 Next(下一步),然后点击 Finish(完成)。
  12. 运行 Ldp.exe
  13. 依次前往连接 > 连接…
  14. 输入以下连接详情:

    Server(服务器):ldap.google.com
    Port(端口):636
    Connectionless(无连接):未勾选
    SSL:勾选
  15. 点击确定
  16. 依次前往查看 > 树
  17. 输入基本 DN。也就是您的域名(采用 DN 格式)。(例如,example.comexample.com 的 DN 为 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