通过SSL为OpenLDAP设置Linux客户端

我正在尝试使用运行OpenLDAP的服务器(并使用OpenSSL,而不是GnuTLS)来设置SSL。

服务器似乎工作正常:我可以使用ldap://进行身份validationldap://也可以在Apache Directory Studio中使用ldaps:// 。 我也可以从客户端使用LDAPS,只要在/etc/ldap.conf中有这个设置:

 tls_checkpeer no 

只要我尝试使用tls_checkpeer yes SSL连接被拒绝。

我在服务器上有以下设置:

 olcTLSCACertificateFile /etc/ssl/certs/cacert.pem olcTLSCertificateFile /etc/ssl/private/newcert.pem olcTLSCertificateKeyFile /etc/ssl/private/newreq.pem 

客户有这些相关的条目:

 # ssl on uri ldaps://192.168.1.15 tls_checkpeer no # tls_cacertdir /etc/ssl/certs # tls_cacertfile /etc/ssl/certs/cacert.pem 

用户可以访问文件/etc/ssl/certs/cacert.pem进行阅读。 通过上述configuration,它可以工作。 如果我取消注释两个注释tls_*configuration条目之一,并更改为tls_checkpeer yes它会失败。

我已经尝试使用证书( tls_cacertfile )cacert.pem和newcert.pem,它不起作用。 cacert.pem有一个-----BEGIN CERTIFICATE-----部分,和newcert.pem一样。

但是,cacert.pem在X509v3 extensions下有这个:

 X509v3 Basic Constraints: CA:TRUE 

…和newcert.pem文件在同一节中有这个:

 X509v3 Basic Constraints: CA:FALSE Netscape Comment: OpenSSL Generated Certificate 

/ etc / ssl / certs中的其他证书除BEGIN CERTIFICATE标记的块外没有任何内容。

使用这个命令:

 openssl s_client -connect 192.168.6.144:636 -showcerts 

我可以看到用于会话的cacert.pem和newcert.pem的内容。

我还没有对客户端或服务器上的/etc/ldap/ldap.conf进行更改。

来自客户的错误包括:

 Feb 8 14:32:24 foo nscd: nss_ldap: could not connect to any LDAP server as cn=admin,dc=example,dc=com - Can't contact LDAP server Feb 8 14:32:24 foo nscd: nss_ldap: failed to bind to LDAP server ldaps://bar: Can't contact LDAP server Feb 8 14:32:24 foo nscd: nss_ldap: could not search LDAP server - Server is unavailable 

服务器上没有特殊的日志条目。 客户端是Ubuntu Lucid Lynx 10.04,就像服务器一样。 所有使用nscd。

试图在Red Hat Enterprise Linux 5.7系统上复制问题的方式相反:应该可能会失败,但不是:使用tls_checkpeer yes和空的tls_cacertdir目录。 我需要SSL才能在两个系统上工作; 我们有Ubuntu和RHEL的组合。

每次configuration更改后,我都重新启动了nscd。

这些是我的实际问题:

  • 我如何获得tls_checkpeer选项的工作? (主要问题)
  • ssl on是否真的在客户端ssl on做任何事情?

谢谢。

在客户端和服务器端,尝试将以下内容添加到/etc/ldap/ldap.conf

 TLS_REQCERT never 

顺便说一下SSL似乎在openldap中被弃用,最好使用TLS。 请参阅http://httpd.apache.org/docs/2.2/mod/mod_ldap.htmlsearch“OpenLDAP SDK”。 configuration是相同的,除了你将使用端口389,而不是在uri中使用“ldaps://”。