我在 Alpine 3.8 系统上安装了 OpenLDAP 2.4.50,还有两个 Debian 10 客户端——我们称它们为 A 和 B——试图连接 ldap 服务器。我的问题是第一个可以,第二个不能。
A 和 B 是相同的机器,都安装了最新的 Debian 10。客户端 A 可以连接 ldap 服务器ldapsearch -x -b "dc=mydomain,dc=tld" -H ldaps://ldap.mydomain.tld/
,但客户端 B 失败。以下是客户端 B 尝试连接时服务器显示的内容:
Jul 16 12:46:39 reglisse local4.debug slapd[17451]: conn=1132 fd=22 ACCEPT from IP=xxx.xxx.xxx.xxx:45444 (IP=0.0.0.0:636)
Jul 16 12:46:39 reglisse local4.debug slapd[17451]: conn=1132 fd=22 TLS established tls_ssf=256 ssf=256
Jul 16 12:46:39 reglisse local4.debug slapd[17451]: conn=1132 fd=22 closed (connection lost)
- 服务器证书已使用
certbot
. - 客户端 A 和客户端 B 都可以使用
ldapsearch -x -b "dc=mydomain,dc=tld" -H ldap://ldap.mydomain.tld/ -v
. 这应该证明没有网络问题,并且服务器正确监听了389端口。 - 客户端 A 和客户端 B 都可以成功连接到 ldaps 端口
openssl s_client -connect ldap.mydomain.tld:636 -showcerts
。这应该证明服务器正确地监听了 636 端口。 - 客户端 A 和客户端 B 都
ldap-utils
安装了相同的包版本,并ldd /usr/bin/ldapsearch
表明两个二进制文件都是针对相同的库构建的。这应该证明两个客户端是相同的。 - 服务器
slapd.conf
绝对没有什么花哨的:
suffix dc=mydomain,dc=tld
rootdn cn=admin,dc=mydomain,dc=tld
rootpw "xxxxxxxxxxx"
TLSCertificateKeyFile /etc/openldap/certs/privkey.pem
TLSCACertificateFile /etc/openldap/certs/fullchain.pem
TLSCertificateFile /etc/openldap/certs/cert.pem
include /etc/openldap/schema/cosine.schema
include /etc/openldap/schema/nis.schema
include /etc/openldap/schema/inetorgperson.schema
那么,我在这里做错了什么?
我发现
ldapsearch
有一个-d
显示有趣事物的选项:因此,客户端 B 似乎不信任服务器 ldap 证书。要解决此问题,我必须在
/etc/ldap/ldap.conf
.有些人可以通过以下方式解决类似问题:
/etc/ldap/ldap.conf
似乎是大多数 ldap 客户端使用的配置文件。客户 A 已经有了这个文件,这就是它工作的原因。