当试图将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等等。