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


15

尝试建立与我的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"

在Ubuntu 13.10上,它可以正常工作。

在SLES上可以正常工作。

在CentOS 6.5上,它返回:

ldap_sasl_bind(SIMPLE): Can't contact LDAP server (-1)

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

那么,通配符证书应归咎于此吗?如果是这样,我该如何解决?

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

按照安德鲁·舒尔曼的建议,我添加-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)

话虽如此,CentOS不信任DigiCert?还是CentOS没有受信任的发行者列表?


1
“无法联系LDAP服务器”听起来更像是该客户端计算机根本无法访问该服务器。您是否已首先检查您实际上可以连接到它?例如telnet ldapserver ldapsopenssl s_client -connect ldapserver:636
理查德·西尔弗曼

是的,我已经确认它可以连接到服务器。毕竟,如果根本无法连接,它将根本无法工作。
David R.

您提到了三个不同的客户端主机。由于网络问题,一个无法正常工作的服务器可能无法连接,而另一个则可以。
理查德·西弗曼

我以为我的帖子很清楚,我正在所有主机上编辑ldap.conf文件。就像我将行添加到文件中一样,它行得通,但没有行则行不通。因此,不是连接问题。
David R.

当我最初阅读您的帖子时,虽然我现在明白了您的意思,但我还是不清楚。无论如何,您添加的TLS调试信息都会显示此问题。我添加了一个后续答案。
理查德·西弗曼

Answers:


9

ldapsearch在/ etc / openldap / cacerts中寻找其受信任的CA证书的存储,并且显然没有设置,因此它拒绝证书,因为它无法为其建立信任链。如果ldapsearch使用的是OpenSSL,则将需要一个由“红帽”“ authconfig”程序生成的“ hashdir”格式的集合,或者一个带有受信任证书的简单列表的单个文件。这里对“ moznss”的引用表明,此ldapsearch是针对Mozilla NSS构建的,在这种情况下,您需要使用“ certutil”来制作cert db(或者,如果有的话,请将其指向系统NSS证书存储)。 。

在工作正常的系统上,ldapsearch必须具有有效的证书存储,这可能是因为这些OpenLDAP软件包是根据OpenSSL构建的(或者那里有可用的NSS风格的存储)。


2
啊。/etc/openldap/certs是证书存储区的位置。不是证书。在/etc/openldap/ldap.conf中,我更改TLS_CACERTDIR /etc/openldap/cacerts为,TLS_CACERTDIR /etc/openldap/certs并且ldapsearch命令开始工作。谢谢!
David R.

我在Ubuntu 16.04上安装了ldapsearch,并且没有/ etc / openldap目录。
vcardillo

13

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


我根据您的建议编辑了问题。谢谢!
David R.

8

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

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

    TLS_REQCERT allow
    

    要么

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

    TLS_CACERT /etc/openldap/cacert
    TLS_REQCERT demand
    

    /etc/openldap/cacert可以是这个,也可以位于任何路径中。它必须包含您的CA的证书链。它可以是具有受信任证书的简单列表的单个文件。

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.