Ошибка аутентификации LDAP фильтра ISAPI на сервере DMZ
Я пишу фильтр ISAPI для веб-сервера, который работает в демилитаризованной зоне. Этот фильтр ISAPI должен подключаться к нашим внутренним контроллерам домена для аутентификации в Active Directory. В брандмауэре существует правило, разрешающее трафик с сервера DMZ на наш контроллер домена через порт 636, и брандмауэр показывает, что трафик проходит нормально. Проблема заключается в ldap_connect()
функция. Я получаю ошибку 0x51 Server Down
при попытке установить соединение. Мы используем IP-адрес контроллеров домена вместо DNS-имени, поскольку веб-сервер находится за пределами домена.
Код подключения ISAPI LDAP:
// Set search criteria
strcpy(search, "(sAMAccountName=");
strcat(search, username);
strcat(search, ")");
// Set timeout
time.tv_sec = 30;
time.tv_usec = 30;
// Setup user authentication
AuthId.User = (unsigned char *) username;
AuthId.UserLength = strlen(username);
AuthId.Password = (unsigned char *) password;
AuthId.PasswordLength = strlen(password);
AuthId.Domain = (unsigned char *) domain;
AuthId.DomainLength = strlen(domain);
AuthId.Flags = SEC_WINNT_AUTH_IDENTITY_ANSI;
// Initialize LDAP connection
ldap = ldap_sslinit(servers, LDAP_SSL_PORT, 1);
if (ldap != NULL)
{
// 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
//
// FAILS HERE!
//
ldap_response = ldap_connect(ldap, &time);
if (ldap_response == LDAP_SUCCESS)
{
// Bind to LDAP connection
ldap_response = ldap_bind_s(ldap, (PCHAR) AuthId.User, (PCHAR) &AuthId, LDAP_AUTH_NTLM);
}
}
// Unbind LDAP connection if LDAP is established
if (ldap != NULL)
ldap_unbind(ldap);
// Return string
return valid_user;
servers = <DC IP Address>
Я проверил этот код на своем локальном компьютере, который находится в том же домене, что и AD, и он работает, как LDAP, так и LDAP через SSL. У нас есть сертификат сервера, установленный на нашем контроллере домена из Политики регистрации Active Directory, но я читал в другом месте, что мне также может понадобиться установить сертификат клиента (для нашего веб-сервера). Это правда?
Кроме того, у нас есть отдельный сайт WordPress, работающий на том же веб-сервере DMZ, который прекрасно подключается к LDAP через SSL. Он использует OpenLDAP через PHP для подключения и использует IP-адрес наших контроллеров домена для подключения. У нас есть файл ldap.conf со строкой кода: TLS_REQCERT never
, Есть ли способ имитировать этот эффект в Visual C с тем, что я пытаюсь сделать для фильтра ISAPI? Надеясь, что это проблема программирования больше, чем проблема сертификата. Если это выходит за рамки программирования, пожалуйста, дайте мне знать или перенаправьте меня в лучшее место, чтобы опубликовать это.
Спасибо!
1 ответ
Решил проблему, добавив ЦС в хранилище сертификатов на веб-сервере. CA никогда не копировался ранее.