支持此功能的版本:Frontline Standard、商务 Plus 版、企业标准版和企业 Plus 版、教育基础版、教育标准版、教与学升级版和教育 Plus 版、Enterprise Essentials Plus。比较您的版本
在尝试将 LDAP 客户端连接到安全 LDAP 服务之前,您可以选择使用 ldapsearch、ADSI 或 ldp.exe 等简单工具快速进行一次连接测试。如果您在尝试将 LDAP 客户端连接到该服务时遇到错误,也可以使用这些工具进行问题排查。
通过下文各节中介绍的测试,您可以检查自己的配置是否有问题,了解常见的错误消息,并获得关于如何解决这些问题的建议。
本文包含以下部分:
- 验证连接并运行 LDAP 查询
通过运行 LDAP 查询,您可以确认自己能够连接到安全 LDAP 并执行查询。
- 如果需要,可运行基本的连接测试
如果 LDAP 查询运行失败,可运行基本的连接测试来检查网络访问和身份验证情况。
注意:如果您在此过程中需要与 Google Workspace 支持团队或 Cloud Identity 专业版支持团队联系,请记得保存命令的输出结果。在向支持团队提供输出结果前,请务必先移除其中的所有个人身份信息。
验证连接并运行 LDAP 查询
在 Google 管理控制台中设置安全 LDAP 服务后,您可以使用 ldapsearch、ADSI 或 Idp.exe 这三种简单工具中的一种来验证与安全 LDAP 的连接。有关详细信息和操作说明,请参阅以下各节。
ldapsearch在命令行中使用 ldapsearch 实用程序,可进行基本的 LDAP 查询。如果成功返回 LDAP 查询结果,则说明 LDAP 客户端能够正常通过底层 TLS 会话和 TCP 连接访问。
要通过 ldapsearch 进行连接测试,请按以下步骤操作:
- 按照 1 添加 LDAP 客户端中的说明创建 LDAP 配置并下载证书。
注意:为简化测试环境,请确保您授予 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}:您网络中运行 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
,然后重试。
- 按照 ldp.exe (Windows) 中的第 1-11 步安装客户端证书。
- 转到 Action(操作)> Connect to…(连接到…)
- 输入以下连接设置:
名称:输入连接名称,例如 Google LDAP。
连接点:“选择或输入标识名或命名上下文”
输入您的域名(采用 DN 格式,例如 example.com 的 DN 为 dc=example,dc=com)。
计算机:“选择或输入域名或服务器”
ldap.google.com
Use SSL-based Encryption(使用基于 SSL 的加密):勾选
- 点击 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)(个人信息交换 (*.pfx;*.p12))。
- 选择第 2 步中的 ldap-client.p12 文件,点击 Open(打开),然后点击 Next(下一步)。
- 输入在第 2 步获取的密码,然后点击 Next(下一步)。
- 选择 Personal(个人)证书存储区,点击 Next(下一步),然后点击 Finish(完成)。
- 运行 Ldp.exe。
- 转到 Connection(连接)> Connect…(连接)。
- 输入以下连接详情:
Server(服务器):ldap.google.com
Port(端口):636
Connectionless(无连接):未勾选
SSL:勾选
- 点击 OK(确定)。
- 转到 View(查看)> Tree(树)。
- 输入基本 DN,也就是您的域名(采用 DN 格式,例如 example.com 的 DN 为 dc=example,dc=com)。
- 点击 OK(确定)。
- 如果连接成功,右侧窗格中会显示基本 DN 中的目录内容。
如果需要,可运行基本的连接测试
如果您在验证连接和运行 LDAP 查询时未能成功获得所需结果,请按照本部分的说明进行连接测试。如果 ldapsearch 未成功返回您要搜索的用户,也未明确指示基本 TLS 会话已成功完成,请使用 OpenSSL 客户端验证 OpenLDAP 所依赖的网络层是否正常运作。
如要进行基本的连接测试,请按以下步骤操作:
- 为您的操作系统安装 openssl 客户端实用程序。
大多数 GNU/Linux 发行版使用的软件包名称都是“openssl”。您可以详细了解其他操作系统的情况。
-
使用 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。