PHP 5.6 と openldap 2.4.40 を使用して EL7 システムで作業しています。
ldapsearch を使用してリモート ldaps サーバーにクエリを実行できます。
ldapsearch -H ldaps://ldap.example.com -D "CN=serviceaccount,OU=Services,DC=example,DC=com" -x -w "sapass" -LLL -b "DC=example,DC=com " cn="acoder"
これは、ユーザー acoder で期待されるデータを返します。
PHP に移行し、上記の同じ資格情報とパス (sapass) を使用して同じサーバーにバインドしようとしています。
// server settings
$srvc_id = 'serviceaccount';
$srvc_pass = "somepass";
$ldap_host = "ldaps://ldap.example.com";
$srvc_dn = "CN=$srvc_id,OU=Services,DC=example,DC=com";
$user_filter = "(uid=$form_user)";
$ldap_conn = ldap_connect($ldap_host);
if ($ldap_conn)
{
echo "<p>Connected to \$ldap_host $ldap_host at line ";
$r = ldap_bind($ldap_conn, $srvc_dn, $srvc_pass);
if (!$r)
{
echo "<p>failed to bind with service account credentials.";
} else {
echo "<p>binded OK.";
}
}
これを に一時的に追加する/etc/openldap/ldap.conf
と、スクリプトが機能します。
TLS_REQCERT never
それをコメントアウトすると、スクリプトは「LDAP サーバーに接続できません」で失敗します。
に追加TLS_CACERTDIR /etc/openldap/certs
するldap.conf
と、コマンドラインから呼び出されたときにスクリプトが正常に動作します。
TLS_CACERTDIR /etc/openldap/certs
# TLS_REQCERT never ### only use for testing ###
httpd が必要な証明書を読み取っていないため、リモート LDAP サーバーと通信できないようです。
私が見た PHP/LDAP セットアップ チュートリアルは EL6 で動作し、EL7 を実行しています。