ISAPI фильтр с LDAP через SSL работает только как администратор

Я создал фильтр ISAPI для IIS 6.0, который пытается аутентифицироваться в Active Directory с использованием LDAP. Фильтр работает нормально при регулярной аутентификации через порт 389, но когда я пытаюсь использовать SSL, я всегда получаю 0x51 Server Down ошибка в ldap_connect() вызов. Даже пропуск вызова подключения и использование ldap_simple_bind_s() приводит к той же ошибке.

Странно то, что если я изменю удостоверение пула приложений на учетную запись локального администратора, тогда фильтр будет работать нормально, и LDAP через SSL будет успешным. Я создал исполняемый файл с тем же кодом ниже и запустил его на сервере как администратор, и он работает. Проблема заключается в использовании идентификатора NETWORK SERVICE по умолчанию для пула приложений сайта. Есть мысли о том, что происходит? Я хочу использовать удостоверение по умолчанию, поскольку не хочу, чтобы веб-сайт имел повышенные привилегии администратора.

Сервер находится в демилитаризованной зоне за пределами сети и домена, где находятся наши контроллеры домена, на которых запущен AD. У нас также есть действующий сертификат для наших контроллеров домена для AD.

Код:

// 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...
}

ОБНОВЛЕНИЕ: я создал нового пользователя без прав администратора и запустил тестовый exe как новый пользователь, и я получил то же самое Server Down ошибка. Я добавил пользователя в группу администраторов и получил ту же ошибку. Единственный пользователь, который, кажется, работает с аутентификацией LDAP через SSL на этом конкретном сервере, является администратором.

Веб-сервер с фильтром ISAPI (и там, где я запускал тестовый exe) работает под управлением Windows Server 2003. Контроллеры домена с AD на них работают под управлением 2008 R2.

Также стоит упомянуть, что у нас есть сайт WordPress на том же сервере, который аутентифицируется по LDAP через SSL с использованием PHP (OpenLDAP), и там нет никаких проблем. У меня есть файл ldap.conf, который определяет TLS_REQCERT never и пользователь, выполняющий код PHP, является IUSR.

2 ответа

Решение

Убедитесь, что отказавший пользователь доверяет центру сертификации вашего ldap-сервера.

Для этого войдите в систему как пользователь, который не работает (вам может потребоваться предоставить временные привилегии для этого, возможно, поместите его в группу "Удаленный рабочий стол"). Начните certmgr.msc и найдите центр сертификации, который вы используете в разделе "Доверенные корневые центры сертификации".

Сравните то, что вы видите с тем, что есть в учетной записи администратора.

Я полагаю, у вас проблема с магазином доверия.

Пожалуйста, смотрите http://www.microsoft.com/resources/documentation/windows/xp/all/proddocs/en-us/sag_cmuncertstor.mspx?mfr=true

Примером проверки этого может быть различие текстового вывода вашей печати содержимого хранилища сертификатов.

Другие вопросы по тегам