安全 LDAP 连接测试

支持此功能的版本:Frontline Standard、商务 Plus 版、企业标准版和企业 Plus 版、教育基础版、教育标准版、教与学升级版和教育 Plus 版、Enterprise Essentials Plus。比较您的版本

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

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

本文包含以下部分:

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

验证连接并运行 LDAP 查询

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

ldapsearch

在命令行中使用 ldapsearch 实用程序,可进行基本的 LDAP 查询。如果成功返回 LDAP 查询结果,则说明 LDAP 客户端能够正常通过底层 TLS 会话和 TCP 连接访问。

要通过 ldapsearch 进行连接测试,请按以下步骤操作:

  1. 按照 1 添加 LDAP 客户端中的说明创建 LDAP 配置并下载证书。

    注意:为简化测试环境,请确保您授予 LDAP 客户端访问权限的单位部门中至少有一位用户。
     
  2. 执行 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}:您网络中运行 stunnel 的计算机的 IP 地址或主机名。
{stunnel_port}:运行 stunnel 的端口(请在您的 stunnel 配置中查看)

成功运行 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

    Use SSL-based Encryption(使用基于 SSL 的加密):勾选
     
  4. 点击 Advanced...(高级…),然后输入以下详细信息:

    Specify credentials(指定凭据):勾选
    Username(用户名):在管理控制台中获取的访问凭据用户名
    Password(密码):在管理控制台中获取的访问凭据密码
    Port Number(端口号):636
    Protocol(协议):LDAP
    Simple bind authentication:(简单绑定身份验证):勾选
     
  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 (*.pfx;*.p12)(个人信息交换 (*.pfx;*.p12))。
  9. 选择第 2 步中的 ldap-client.p12 文件,点击 Open(打开),然后点击 Next(下一步)。
  10. 输入在第 2 步获取的密码,然后点击 Next(下一步)。
  11. 选择 Personal(个人)证书存储区,点击 Next(下一步),然后点击 Finish(完成)。
  12. 运行 Ldp.exe
  13. 转到 Connection(连接)> Connect…(连接)
  14. 输入以下连接详情:

    Server(服务器):ldap.google.com
    Port(端口):636
    Connectionless(无连接):未勾选
    SSL:勾选
     
  15. 点击 OK(确定)。
  16. 转到 View(查看)> Tree(树)
  17. 输入基本 DN,也就是您的域名(采用 DN 格式,例如 example.com 的 DN 为 dc=example,dc=com)。
  18. 点击 OK(确定)。
  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(服务器名称指示)并会使用 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

相关文章

该内容对您有帮助吗?

您有什么改进建议?
搜索
清除搜索内容
关闭搜索框
主菜单
1039949246356994852
true
搜索支持中心
true
true
true
true
true
73010
false
false