我正在尝试使用运行 OpenLDAP(并使用 OpenSSL,而不是 GnuTLS)的服务器设置 SSL。
服务器似乎运行良好:我可以使用 Apache Directory Studio 进行身份验证ldap://
,也可以ldaps://
从 Apache Directory Studio 使用。我也可以从客户端使用 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 可供用户读取。使用上述配置,它可以正常工作。如果我取消注释两个注释tls_*
配置条目中的一个,则更改tls_checkpeer yes
会失败。
我尝试过使用 cacert.pem 和 newcert.pem 作为证书 ( tls_cacertfile
),但不起作用。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。
每次更改配置后我都会重新启动 nscd。
这些是我的实际问题:
- 我如何才能让该
tls_checkpeer
选项起作用?(主要问题) ssl on
在客户端上实际上做了什么吗?
谢谢。
答案1
在客户端和服务器中尝试将以下内容添加到 /etc/ldap/ldap.conf
TLS_REQCERT never
顺便说一句,OpenLDAP 似乎已弃用 SSL,最好使用 TLS。请参阅http://httpd.apache.org/docs/2.2/mod/mod_ldap.html搜索“OpenLDAP SDK”。配置相同,只是您将使用端口 389,而不是在 uri 中使用“ldaps://”。