我正在使用 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 选项方面是相同的。