WindowsのXAMPP環境下でPHPからLDAPを使う | A Day In The Boy's Life

A Day In The Boy's Life

とあるエンジニアのとある1日のつぶやき。

以前に「PHPからActive Directoryに認証・パスワード変更する方法 」について書きましたが、このソースコードを開発環境であるローカルのWindows7(+ XAMPP)環境に持ってくるとうまく動作しなかったのでその回避方法についてのメモです。

確認した環境でのXAMPPのバージョンは1.8.2、含まれるPHPのバージョンは5.4.31です。



LDAPが有効になっているかを確認する


まずはXAMPPのPHPがLDAP関数を使えるようになっているかを確認します。

手っ取り早い方法はphpinfo()で見てみることです。


ldap.gif


上記のようにLDAP Supportがenabledになっているかを確認します。

なっていない場合は、PHPの設定でLDAPを有効にしていない可能性があるので、php.iniファイルを編集します。


extension=php_ldap.dll

php_ldap.dllは、php/extディレクトリ内にあるはずです。

設定変更後は、Apacheを再起動し再度phpinfoでLDAPが有効になったかを確認します。



LDAPSを使えるようにする


LDAPS(LDAP over SSL/TLS)を使いたい場合は、OpenSSLの設定も必要になります。

LDAPSを使いたいというのは、


$conn = ldap_connect('ldaps://ldap.example.com');

というような接続をしたいというケースです。

まずは、OpenSSL関係のextensionを有効にしてdllを読み込ませます。


extension=php_openssl.dll

続いて、証明書の検証を無効にするように設定しておきます。

接続先のLDAPサーバーが自己証明書を使っている場合、この設定を入れておかないとチェックに引っかかって接続できません。


c:\openldap\sysconf\ldap.conf

上記ファイルを編集します。

存在しない場合は、新しく作成します。

その後、下記の一行を追加します(中身はこの一行のみで大丈夫です)。


TLS_REQCERT never

これにより証明書のチェックが行われなくなります。

この設定無しに、LDAPS経由でサーバーに接続すると「Can't connect to the LDAP server」が返ってきてうまく接続できませんでした(LDAPだとうまく接続できたり)。

Linuxサーバー上だと、意図的にopensslをインストールしているので設定ファイルとか把握していましたが、XAMPP環境だとオールインワンのせいでどこに何がインストールされているのかよくわからないため、こんな設定ができるとも知らず結構はまってしまいました。