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です。
失敗しているユーザーがLDAPサーバーの認証局を信頼していることを確認してください。
これを行うには、失敗しているユーザーとしてログインします(そのための一時的な特権を付与する必要がある場合があり、「リモートデスクトップ」グループに配置する場合があります)。開始certmgr.msc
そして、「信頼されたルート証明機関」の下で使用している証明機関を探します。
表示されているものを管理者アカウントにあるものと比較します。
トラストストアに問題があると思います。
これをテストするサンプルの方法は、証明書ストアの内容を印刷するテキストベースの出力を比較することです。