php 5.3.x ldap_bind()无法使用自签名证书ldaps://

时间:2012-05-16 21:10:34

标签: php openldap

我正在使用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:无法连接而不是连接成功。

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

1 个答案:

答案 0 :(得分:0)

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

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

当我编译php 5.3.11时,它抱怨说SSL库本应该用“shared”编译,所以我重新编译了OpenSSL(相同的安装目录)并将PHP与之链接。

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

基于LDAP的SSL现在正在运行。