Ubuntu 上的 Apache+LDAP 身份验证显示“无法联系 LDAP 服务器”,而 ldapsearch 却很完美

Ubuntu 上的 Apache+LDAP 身份验证显示“无法联系 LDAP 服务器”,而 ldapsearch 却很完美

我正在从现有的 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,请参阅此错误报告:

https://bugs.launchpad.net/bugs/926350

相关内容