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
Примером проверки этого может быть различие текстового вывода вашей печати содержимого хранилища сертификатов.