0

我正在使用 Apache/2.2.22 (Unix) mod_ssl/2.2.22 OpenSSL/0.9.8w 和 PHP/5.3.13 在 RHEL 5.6 (x86_64) 上设置新的 LAMP 服务器。(我也尝试过使用 PHP 5.3.11。)

问题是我无法绑定到使用自签名证书的 SSL LDAP 服务器。

TLS certificate verification: Error, self signed certificate in certificate chain

我读过的所有地方都提到将 ldap.conf 修改为“TLS_REQCERT never”,但这不起作用。(这也不是永久解决方案,因为更改会被某些公司子系统覆盖。)

我还尝试将其放入 PHP 代码中:

putenv('LDAPTLS_REQCERT=never');

这也没有奏效。

需要注意的三点:

1) 相同的代码在类似的服务器设置中运行良好,但使用的是 PHP 5.2.x,并且对 ldap.conf 文件没有任何更改。

2)当通过 CLI 而不是通过 Apache 运行相同的 PHP 脚本时,它工作正常

3)如果我删除 ldaps:// 连接并只使用 ldap://,它可以正常工作。

我无法弄清楚为什么对 ldap.conf 的更改无法正常工作以及为什么 CLI 会工作,即使 ldap.conf 没有被修改。

编辑:

我不再认为证书检查是问题,但我仍然在努力让 ldaps:// 在从 Apache 运行时工作。

这是从 CLI 运行时的调试:

TLS certificate verification: Error, self signed certificate in certificate chain
TLS trace: SSL_connect:SSLv3 read server certificate A
TLS trace: SSL_connect:SSLv3 read server done A
TLS trace: SSL_connect:SSLv3 write client key exchange A
TLS trace: SSL_connect:SSLv3 write change cipher spec A
TLS trace: SSL_connect:SSLv3 write finished A
TLS trace: SSL_connect:SSLv3 flush data
TLS trace: SSL_connect:SSLv3 read finished A
ldap_open_defconn: successful
ldap_send_server_request

在 Apache 下运行时也是如此:

TLS certificate verification: Error, self signed certificate in certificate chain
TLS trace: SSL_connect:SSLv3 read server certificate A
TLS trace: SSL_connect:SSLv3 read server done A
TLS trace: SSL_connect:SSLv3 write client key exchange A
TLS trace: SSL_connect:error in SSLv3 write finished A
TLS trace: SSL_connect:error in SSLv3 write finished A
TLS: can't connect.

因此,这两种情况下的证书错误似乎都很好,但是当作为 Web 模块运行时,我得到 TLS: can't connect 与成功连接。

phpinfo() 和 php -i 在 OpenSSL 和 LDAP 选项方面是相同的。

4

1 回答 1

0

我终于能够解决这个问题。不幸的是,这更像是一个奇怪的用户错误案例,而不是一些未知的错误。

我记得当我编译 LAMP 堆栈的所有部分时,我最初使用 -fPIC 参数编译 OpenSSL。httpd 与此相关联。

当我编译 php 5.3.11 时,它抱怨 SSL 库应该用“共享”编译,所以我重新编译了 OpenSSL(相同的安装目录)并将 PHP 链接到那个。

显然,由于这个原因,httpd 在使用 OpenSSL 库时遇到了问题,所以我针对新的 OpenSSL 库重新编译了 httpd 并重新安装了它自己。

SSL over LDAP 现在正在运行。

于 2012-05-17T17:32:40.667 回答