Ошибка аутентификации 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 никогда не копировался ранее.

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