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

当试图将ldaps连接到我的Novel eDirectory 8.8服务器时,有时我必须将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购买的通配证书。 我的同事发现一些报告指出一些系统有通配符问题。

那么,是通配证书的责任? 如果是的话,我该如何解决?

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

遵循Andrew Schulman的build议,我在我的ldapsearch命令中添加了-d1 。 这是我最后的结果:

 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没有受信任的发行者名单?

ldapsearch正在/ etc / openldap / cacerts中查找其可信的CA证书库,而且显然没有设置,因此它将拒绝证书,因为它无法为其构build信任链。 如果ldapsearch使用的是OpenSSL,那么它将需要一个由例如红帽“authconfig”程序产生的“hashdir”格式集合,或者一个带有一个可信证书的单个文件的单个文件。 这里提到的“moznss”表明,这个ldapsearch是针对Mozilla NSS构build的,在这种情况下,您需要使用“certutil”来创buildcert db(或者更好的,指向系统NSS证书库,如果有的话) 。

在正在工作的系统上,ldapsearch必须有一个工作证书存储,可能是因为这些OpenLDAP包是针对OpenSSL构build的(或者可能存在可用的NSS风格的存储)。

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

解决scheme取决于您的安装:

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

     TLS_REQCERT allow 

    要么

     TLS_REQCERT never 
  • 如果您正在使用有效的证书,则可能是您的ldap安装不知道可信CA证书的存储位置(可能取决于您的OpenSSL安装)。 然后你可以尝试设置它的位置,并强制检查configuration/etc/openldap/ldap.conf

     TLS_CACERT /etc/openldap/cacert TLS_REQCERT demand 

    /etc/openldap/cacert可以是这个或者位于任何path。 它必须包含您的CA的证书链。 它可以是一个包含一个可信任证书列表的单个文件。

注意path依赖于ldap提供者。 它可能是/etc/ldap/etc/openldap等等。