nslcd.conf 中没有“tls_cacertdir”参数时,LDAPS 连接成功建立

nslcd.conf 中没有“tls_cacertdir”参数时,LDAPS 连接成功建立

我的服务器环境中有一个 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 捆绑文件)。它被用作默认信任存储如果没有其他指定。

因此我怀疑您的两个系统有不同的默认信任库。

相关内容