2012-06-18 4 views
1

Я пишу фильтр ISAPI для веб-сервера, который мы запускаем в DMZ. Этот фильтр ISAPI должен подключаться к нашим внутренним контроллерам домена для проверки подлинности в Active Directory. В брандмауэре есть правило разрешить трафик с сервера DMZ на наш контроллер домена на порте 636, а брандмауэр показывает, что трафик проходит через штраф. Проблема заключается в функции ldap_connect(). При попытке установить соединение возникает ошибка 0x51 Server Down. Мы используем IP-адрес контроллера домена вместо имени DNS, поскольку веб-сервер находится вне домена.Ошибка аутентификации LDAP фильтра ISAPI на сервере DMZ

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? Надеемся, что это проблема программирования, а не проблема с сертификатом. Если это выходит за рамки программирования, сообщите мне или перенаправите меня на лучшее место, чтобы опубликовать это.

Спасибо!

+0

Вам здесь не нужен сертификат клиента. Можете ли вы получить сетевую трассировку и посмотреть, что происходит? –

+0

Кроме того, настройте свой фильтр на '(& (objectCategory = person) (objectClass = пользователь) (samAccountName = ...))'. Это будет более эффективно. –

+0

О, еще одна вещь, я считаю, что вам нужна простая привязка, а не NTLM. –

ответ

1

Решил проблему, добавив CA в хранилище сертификатов на веб-сервере. CA никогда не копировался раньше.

 Смежные вопросы

  • Нет связанных вопросов^_^