我的服务器环境中有一个 OpenLDAP 服务器,还有另外两个服务器 [两个 LDAP 客户端],我已将它们与 LDAP 服务器一起配置以供用户登录。我的 LDAP 服务器仅支持 LDAPS(端口:636),不支持 LDAP(端口:389)。但我的问题是,我从其中一个 LDAP 客户端中删除了 nslcd.conf 中的“tls_cacertdir”指令,并允许用户登录到该特定服务器 [服务器配置为通过 LDAPS(端口:636)与 LDAP 服务器通信。正常 LDAP(端口:389)已禁用]。令人惊讶的是,该服务器允许用户登录到服务器。但同时我从另一个 LDAP 客户端中删除了“tls_cacertdir”,然后它不允许用户登录到服务器,并且出现错误,提示无法连接到 LDAP 服务器。现在我有点困惑,为什么我在这两个 LDAP 客户端中遇到了两种不同的行为。此外,我现在很担心,因为现在我怀疑 LDAP 是否真的通过 LDAPS 进行通信。有人能向我解释为什么会发生这种情况吗?
Server A : [this LDAP client will reject user login when I remove "tls_cacertdir" directive from the nslcd.conf]
openldap-clients.x86_64 2.4.44-5.el7
nss-pam-ldapd.x86_64 0.8.13-8.el7
Server B : [this LDAP client will NOT reject user login when I remove "tls_cacertdir" directive from the nslcd.conf]
openldap-clients.x86_64 2.4.44-21.el7_6
nss-pam-ldapd.x86_64 0.8.13-16.el7_6.1
在一些地方我读到,当 slapd 使用 GnuTLS 时,“tls_cacertdir”会被忽略。但后来我检查了 slapd [参见下面的转储]。它没有使用 GnuTLS。然后我删除了“/etc/pki/tls”目录并尝试登录。然后“服务器 B”不允许用户登录。LDAPS 连接失败。有人能解释一下为什么会发生这种情况吗?
[root@xxx-xxx-xx ~]$ ldd /usr/sbin/slapd
linux-vdso.so.1 => (0x00007ffc7ed3a000)
libldap_r-2.4.so.2 => /lib64/libldap_r-2.4.so.2 (0x00007f58caea9000)
liblber-2.4.so.2 => /lib64/liblber-2.4.so.2 (0x00007f58cac9a000)
libdb-5.3.so => /lib64/libdb-5.3.so (0x00007f58ca8dc000)
libsasl2.so.3 => /lib64/libsasl2.so.3 (0x00007f58ca6bf000)
libnss3.so => /lib64/libnss3.so (0x00007f58ca392000)
libpthread.so.0 => /lib64/libpthread.so.0 (0x00007f58ca176000)
libcrypt.so.1 => /lib64/libcrypt.so.1 (0x00007f58c9f3f000)
libslapi-2.4.so.2 => /lib64/libslapi-2.4.so.2 (0x00007f58c9d1f000)
libltdl.so.7 => /lib64/libltdl.so.7 (0x00007f58c9b15000)
libwrap.so.0 => /lib64/libwrap.so.0 (0x00007f58c990a000)
libc.so.6 => /lib64/libc.so.6 (0x00007f58c953d000)
libresolv.so.2 => /lib64/libresolv.so.2 (0x00007f58c9324000)
libssl3.so => /lib64/libssl3.so (0x00007f58c90d2000)
libsmime3.so => /lib64/libsmime3.so (0x00007f58c8eab000)
libnssutil3.so => /lib64/libnssutil3.so (0x00007f58c8c7c000)
libplds4.so => /lib64/libplds4.so (0x00007f58c8a78000)
libplc4.so => /lib64/libplc4.so (0x00007f58c8873000)
libnspr4.so => /lib64/libnspr4.so (0x00007f58c8635000)
libdl.so.2 => /lib64/libdl.so.2 (0x00007f58c8431000)
/lib64/ld-linux-x86-64.so.2 (0x00007f58cb573000)
libfreebl3.so => /lib64/libfreebl3.so (0x00007f58c822e000)
libnsl.so.1 => /lib64/libnsl.so.1 (0x00007f58c8014000)
librt.so.1 => /lib64/librt.so.1 (0x00007f58c7e0c000)
答案1
你没有告诉我们你使用的是哪个 Linux 发行版。但大多数发行版都附带一个名为ca 证书(或类似名称),它有一个工具来构建系统范围的信任存储(CA 目录和 CA 捆绑文件)。它被用作默认信任存储库如果没有其他指定。
因此我怀疑您的两个系统有不同的默认信任库。