我正在从现有的 apache+LDAP+mysql+php 服务器迁移到新的硬件平台。旧服务器运行 Debian Lenny,我没有可用的配置文档(由之前的系统管理员完成);新服务器运行 Ubuntu 10.04.2 LTS 32 位。
在新服务器上安装 Apache 并配置 LDAP 客户端后,对 LDAP 主服务器(另一台专用服务器)执行 ldapsearch 可以正常返回结果。但是,当使用带有 https 的 apache 时,日志会抱怨“无法联系 LDAP 服务器”。
我正在使用 ldaps 进行身份验证,并且可以确认 LDAP 主服务器上的 636 端口已打开。我不明白为什么 apache 会失败,而常规 ldapsearch 正在运行!
以下是虚拟主机配置的一部分:
<Directory />
Options FollowSymLinks
AllowOverride None
#AuthLDAPEnabled on
AuthType Basic
AuthBasicProvider ldap
AuthName "Private"
AuthLDAPURL ldaps://master.ldap.organisation.com:636/ou=people,dc=organisation,dc=com?uid
AuthzLDAPAuthoritative off
require valid-user
AddType application/x-httpd-php .php .phtml
<IfModule mod_php4.c>
php_flag magic_quotes_gpc Off
php_flag track_vars On
php_value include_path .
</IfModule>
</Directory>
非常感谢任何帮助/建议!
答案1
您需要告诉 Apache 信任 LDAP 服务器的证书。
看这。
ldapsearch(和其他 ldap* 二进制文件)来自 OpenLDAP 工具包。ldapsearch 可以工作(而 Apache 不行)的原因是,之前的系统管理员必须将 LDAP 服务器使用的证书(或颁发 LDAP 服务器证书的 CA 证书)放入 OpenLDAP 工具查找证书的位置 - 通常这是/etc/openldap/cacerts
,但它在某种程度上依赖于发行版。
去那个目录看看。
找到正确的证书后,使用 mod_ldap 指令(请参阅这里) 来指向它。将此指令放在 LDAP 配置之前。例如:
如果是 LDAP 服务器的客户端证书:
LDAPTrustedGlobalCert CERT_BASE64 /etc/openldap/cacerts/ldap-server.pem
如果它是签署 LDAP 服务器证书的 CA 的证书:
LDAPTrustedGlobalCert CERT_CA /etc/openldap/cacerts/ldap-cacert.pem
使用 OpenSSL 命令行工具检查证书以确定它是哪一个:
openssl x509 -in /path/to/cert.pem -noout -text
答案2
libgcrypt11 中存在一些错误,会导致使用 GnuTLS 2.10.* 或更早版本时出现问题,这些问题可以通过在 LDAP 客户端上运行 nscd 来解决。
sudo apt-get install nscd
使用 GnuTLS 2.11.* 或更高版本,首选加密后端更改为 nettle。对于 Ubuntu 12.04,请参阅此错误报告: