有些系统无法通过 ldaps 连接到 ldap,但其他系统可以,是通配符证书吗?

Dav*_* R. 18 ldap edirectory ssl-certificate

尝试与我的 Novel eDirectory 8.8 服务器建立 ldaps 连接时,有时我必须放入TLS_REQCERT never客户端服务器 ldap.conf 文件。显然,这是一个坏主意。

我运行的命令与实际工作的凭据类似...

ldapsearch -x -H ldaps://ldapserver -b 'ou=active,ou=people,dc=example,dc=org' -D 'cn=admin,dc=example,dc=org' -W "cn=username"
Run Code Online (Sandbox Code Playgroud)

在 Ubuntu 13.10 上,它运行良好。

在 SLES 上它工作正常。

在 CentOS 6.5 上,它返回:

ldap_sasl_bind(SIMPLE): Can't contact LDAP server (-1)
Run Code Online (Sandbox Code Playgroud)

现在,我导入的证书是从 DigiCert 购买的通配符证书。我的同事发现一些报告表明某些系统存在通配符问题。

那么,通配符证书是罪魁祸首吗?如果是这样,我该如何解决?

如果它不是通配符证书,那么它是什么?

按照 Andrew Schulman 的建议,我添加-d1到我的 ldapsearch 命令中。这是我最终的结果:

ldap_url_parse_ext(ldaps://ldap.example.org)
ldap_create
ldap_url_parse_ext(ldaps://ldap.example.org:636/??base)
Enter LDAP Password: 
ldap_sasl_bind
ldap_send_initial_request
ldap_new_connection 1 1 0
ldap_int_open_connection
ldap_connect_to_host: TCP ldap.example.org:636
ldap_new_socket: 3
ldap_prepare_socket: 3
ldap_connect_to_host: Trying 10.225.0.24:636
ldap_pvt_connect: fd: 3 tm: -1 async: 0
TLS: certdb config: configDir='/etc/openldap' tokenDescription='ldap(0)' certPrefix='cacerts' keyPrefix='cacerts' flags=readOnly
TLS: cannot open certdb '/etc/openldap', error -8018:Unknown PKCS #11 error.
TLS: could not get info about the CA certificate directory /etc/openldap/cacerts - error -5950:File not found.
TLS: certificate [CN=DigiCert High Assurance EV Root CA,OU=www.digicert.com,O=DigiCert Inc,C=US] is not valid - error -8172:Peer's certificate issuer has been marked as not trusted by the user..
TLS: error: connect - force handshake failure: errno 2 - moznss error -8172
TLS: can't connect: TLS error -8172:Peer's certificate issuer has been marked as not trusted by the user..
ldap_err2string
ldap_sasl_bind(SIMPLE): Can't contact LDAP server (-1)
Run Code Online (Sandbox Code Playgroud)

这么说来,CentOS 不信任 DigiCert?或者 CentOS 没有受信任的发行者列表?

And*_*man 17

如果无法验证 TLS 证书,ldapsearch 将显示“无法联系 LDAP 服务器”。添加-d1到您的 ldapsearch 命令,并检查以“TLS:”开头的输出行,以获取有关 TLS 连接是否失败以及原因的更多信息。


Ric*_*man 10

ldapsearch 正在 /etc/openldap/cacerts 中查找其受信任 CA 证书的存储,但显然没有设置,因此它拒绝该证书,因为它无法为其构建信任链。如果 ldapsearch 使用 OpenSSL,它需要一个“hashdir”格式集合,例如由 Red Hat“authconfig”程序生成的,或者一个带有可信证书平面列表的单个文件。此处对“moznss”的引用表明此 ldapsearch 是针对 Mozilla NSS 构建的,在这种情况下,您需要使用“certutil”来制作证书数据库(或者更好,将其指向系统 NSS 证书库,如果有的话) .

在它工作的系统上,ldapsearch 必须有一个有效的证书存储,也许是因为那些 OpenLDAP 包是针对 OpenSSL 构建的(或者那里可能有一个可用的 NSS 样式存储)。

  • 啊。```/etc/openldap/certs``` 是证书存储的地方。不是cacerts。在 /etc/openldap/ldap.conf 中,我将 ```TLS_CACERTDIR /etc/openldap/cacerts``` 更改为 ```TLS_CACERTDIR /etc/openldap/certs``` 并且我的 ldapsearch 命令开始工作。谢谢! (3认同)

Jua*_*cia 10

解决方案取决于您的安装:

  • 如果您使用的是非有效的证书,您可以强制接受它配置/etc/openldap/ldap.conf

    TLS_REQCERT allow
    
    Run Code Online (Sandbox Code Playgroud)

    或者

    TLS_REQCERT never
    
    Run Code Online (Sandbox Code Playgroud)
  • 如果您使用的是有效证书,则您的 ldap 安装可能不知道可信 CA 证书的存储位置(可能取决于您的 OpenSSL 安装)。然后,你可以尝试将其设置的位置和力检查配置/etc/openldap/ldap.conf

    TLS_CACERT /etc/openldap/cacert
    TLS_REQCERT demand
    
    Run Code Online (Sandbox Code Playgroud)

    /etc/openldap/cacert可以是这个或位于任何路径中。它必须包含您的 CA 的证书链。它可以是单个文件,其中包含可信证书的平面列表。

注意路径取决于 ldap 提供程序。这可能是/etc/ldap/etc/openldap左右。