web-dev-qa-db-ja.com

LDAP over SSLを使用したISAPIフィルターは、管理者としてのみ機能します

LDAPを使用してActiveDirectoryに対して認証を試みるIIS 6.0のISAPIフィルターを作成しました。フィルターはポート389を介して定期的に認証する場合は正常に機能しますが、SSLを使用しようとすると常にldap_connect()呼び出しでの_0x51 Server Down_エラー。接続呼び出しをスキップしてldap_simple_bind_s()を使用しても、同じエラーが発生します。

奇妙なことに、アプリプールIDをローカル管理者アカウントに変更すると、フィルターは正常に機能し、LDAP overSSLが成功します。以下と同じコードでexeを作成し、サーバー上でadminとして実行すると、動作します。サイトのアプリプールにデフォルトのNETWORKSERVICE IDを使用することが、問題のようです。何が起こっているのかについて何か考えはありますか? Webサイトに昇格された管理者権限を持たせたくないので、デフォルトのIDを使用したいと思います。

サーバーは、ADを実行するDCが存在するネットワークとドメインの外部のDMZにあります。ADのDCにも有効な証明書があります。

コード:

_// Initialize LDAP connection
LDAP * ldap = ldap_sslinit(servers, LDAP_SSL_PORT, 1);
ULONG version = LDAP_VERSION3;

if (ldap == NULL)
{
    strcpy(error_msg, ldap_err2string(LdapGetLastError()));
    valid_user = false;
}
else
{
    // Set LDAP options
    ldap_set_option(ldap, LDAP_OPT_PROTOCOL_VERSION, (void *) &version);
    ldap_set_option(ldap, LDAP_OPT_SSL, LDAP_OPT_ON);

    // Make the connection
    ldap_response = ldap_connect(ldap, NULL); // <-- Error occurs here!

    // Bind and continue...
}
_

PDATE:管理者権限なしで新しいユーザーを作成し、新しいユーザーとしてテストexeを実行しましたが、同じ_Server Down_エラーが発生しました。ユーザーをAdministratorsグループに追加しましたが、同じエラーが発生しました。この特定のサーバーでLDAPoverSSL認証を使用していると思われるユーザーは管理者だけです。

ISAPIフィルターを備えたWebサーバー(およびテストexeを実行している場所)はWindows Server2003を実行しています。ADを搭載したDCは2008R2を実行しています。

また、言及する価値があるのは、同じサーバー上にWordPress(OpenLDAP)を使用してSSL経由でLDAPに対して認証するPHPサイトがあり、問題はないということです。 _TLS_REQCERT never_を指定するldap.confファイルで、PHPコードを実行しているユーザーはIUSRです。

2
Zac

失敗しているユーザーがLDAPサーバーの認証局を信頼していることを確認してください。

これを行うには、失敗しているユーザーとしてログインします(そのための一時的な特権を付与する必要がある場合があり、「リモートデスクトップ」グループに配置する場合があります)。開始certmgr.mscそして、「信頼されたルート証明機関」の下で使用している証明機関を探します。

表示されているものを管理者アカウントにあるものと比較します。

1
ixe013

トラストストアに問題があると思います。

http://www.Microsoft.com/resources/documentation/windows/xp/all/proddocs/en-us/sag_cmuncertstor.mspx?mfr=true を参照してください。

これをテストするサンプルの方法は、証明書ストアの内容を印刷するテキストベースの出力を比較することです。

0
Brennan