2012-05-16 29 views
0

我正在RHEL 5.6(x86_64)上建立一个新的LAMP服务器,使用Apache/2.2.22( Unix)mod_ssl/2.2.22 OpenSSL/0.9.8w和PHP/5.3.13。 (我也试过用PHP 5.3.11。)php 5.3.x ldap_bind()失败ldaps://使用自签名证书

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

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

我读过的每处都提到将ldap.conf修改为“TLS_REQCERT永不”,但这不起作用。 (这也不会是因为变化是由一些企业的子系统覆盖一个永久的解决方案)

我也试图把这个在PHP代码:

putenv('LDAPTLS_REQCERT=never'); 

其中也没有工作。

三点注意事项:

1)相同的代码以类似的服务器设置工作正常,但使用PHP 5.2.x是,也没有改变在ldap.conf文件。 //连接,并只使用LDAP://,它的工作原理没有问题

2)当通过CLI,而不是通过Apache运行相同的PHP脚本中,如果我删除LDAPS正常工作

3)。

我不明白为什么对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选项相同。

+0

强制性:没有验证证书的SSL比没有SSL更安全0%。 – hobbs

+3

这是在内部的公司网络上,所以我不关心证书的有效性。通过SSL的LDAP意味着流量本身被加密,这是我的最终目标,因为这是用于身份验证并提供密码的。 – Randy

+0

可以从非SSL连接窥探密码的人可以使用MITM,然后从SSL连接中窥探密码,除非您确认证书实际上属于合法服务器,否则您永远不会知道。 – hobbs

回答

0

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

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

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

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

SSL over LDAP正在运行。