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');
これもうまくいきませんでした。
次の 3 つの点に注意してください。
1) この同じコードは、同様のサーバー設定で正常に動作しましたが、PHP 5.2.x を使用しており、ldap.conf ファイルに変更はありませんでした。
2) Apache ではなく CLI 経由で同じ PHP スクリプトを実行すると、正常に動作します。
3) ldaps:// 接続を削除して ldap:// のみを使用すると、問題なく動作します。
ldap.conf への変更が正しく機能しない理由と、ldap.conf が変更されていない場合でも CLI が機能する理由がわかりません。
編集:
証明書チェックが問題だとは思わなくなりましたが、Apache から実行したときに ldaps:// を機能させるのにまだ苦労しています。
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 のオプションに関しては同じです。