web-dev-qa-db-ja.com

LDAPが認証済みバインドを実行できない-PHP / Apacheを使用したWindows Server 2008 R2

サーバーに対して認証されたバインドを実行する際に問題があります。問題はコードにはないようですが、サーバーの問題である可能性があります。

ちょうどあなたが知っているので;

  • LDAPはApache/PHPで有効になっています
  • [email protected]として接続しています
  • ドメインコントローラーでLDAPが実行されており、ファイアウォールにエントリがある(Windows Server 2008 R2)問題が発生している可能性があります。これは、DCとしてセットアップされ、デフォルトでLDAPを実行しています。特別なことはしていません。 LDAPの設定
  • 匿名バインドは実行できますが、認証バインドは実行できません

このスクリプトを使用して匿名でバインドできます。

$ldapconn = ldap_connect("machinename.domain.com")
    or die("Could not connect to LDAP server.");

if ($ldapconn) {

    // binding anonymously
    $ldapbind = ldap_bind($ldapconn);

    if ($ldapbind) {
        echo "LDAP bind anonymous successful...";
    } else {
        echo "LDAP bind anonymous failed...";
    }

}

ただし、このスクリプトを使用して認証済みバインドを実行しようとすると、失敗します。

// Authenticated Bind
$ldaprdn  = '[email protected]';     // ldap rdn or dn
$ldappass = 'password';  // associated password

// connect to ldap server
$ldapconn = ldap_connect("machinename.domain.com")
    or die("Could not connect to LDAP server.");

if ($ldapconn) {

    // binding to ldap server
    $ldapbind = ldap_bind($ldapconn, $ldaprdn, $ldappass);

    // verify binding
    if ($ldapbind) {
        echo "LDAP bind successful...";
    } else {
        echo "LDAP bind failed...";
    }

}

どこがいけないの?

3
Matt

さて、多くの調査の結果、ldap_errno()ldap_error()を使用してエラー情報をオンにしたところ、「Strong(er)authentication required」というエラーが2つの解決策を見つけました。

グループポリシー設定の調整

  • 署名のネゴシエート(ネットワークセキュリティ:LDAPクライアント署名の要件)
  • 署名要件なし(ドメインコントローラー:LDAPサーバー署名要件)

  • 結果:バインドに成功し、ユーザー名またはパスワードを誤って入力すると、予想どおり「無効な資格情報」がスローされます。

LDAP over SSL(LDAPS)を有効にする

3
Matt