Назад | Перейти на главную страницу

Авторизация NTLM с использованием виртуальных хостов на основе имен Apache через SSL

У меня есть среда разработки, которая работает через сервер Apache. Этот сервер apache требует SSL и аутентификации / авторизации NTLM с поддержкой Centrify с серверной частью AD, используя групповой доступ для просмотра веб-страниц. В этой среде будет несколько проектов, поэтому я хочу настроить виртуальный хостинг, который позволит каждому проекту изменять свой собственный виртуальный хост с любыми конкретными модулями apache. Веб-файлы будут находиться в / var / www / project1; / var / www / project2; и т.д..

У меня уже есть DNS, настроенный правильно, чтобы указать * .domain на сервер apache, а также сертификат SSL с подстановочными знаками, в котором поле altDNSName было установлено с * .domain.

Проблема заключается в части аутентификации NTLM:

Если я укажу в браузере на https: //hostname.fqdn/project1/index.html, авторизация NTLM обрабатывается именно так, как я хочу. Я считаю, что это работает с моего виртуального хоста по умолчанию.

Если вместо этого я укажу в браузере https: //project1.domain/index.html, журналы ошибок Apache сообщают, что «Пользователь не прошел аутентификацию NTLM для /index.html. Ошибка: ошибка входа в систему.

<VirtualHost ipaddress:443>
    Servername "hostname.fqdn"
    DocumentRoot "/var/www/"

    SSLEngine on
    SSLCertificateFile  /path/to/cert.crt
    SSLCertificateKeyFile   /path/to/cert.key
</VirtualHost>

<VirtualHost ipaddress:443>
    ServerName "project1.domain"
    DocumentRoot "/var/www/project1"

    SSLEngine on
    SSLCertificateFile  /path/to/cert.crt
    SSLCertificateKeyFile   /path/to/cert.key
</VirtualHost>

<Directory "/var/www">
    Options Indexes FollowSymLinks

    SSLRequireSSL

    AllowOverride None

    Order allow,deny
    Allow from all
</Directory>

<Directory "/var/www/project1">
    AuthType CENTRIFYDC

    EnableBasicAuth     false
    EnableKerberosAuth  false
    EnableNtlmAuth      true

    Require group       required_ad_group
</Directory>

Я попытался сделать это как с IE, так и с Firefox, убедившись, что * .domain находится в моей зоне локальной интрасети для IE и что network.automatic-NTLM-auth.trusted-uris и network.negotiate-auth.trusted-uris настройки в Firefox установлены правильно.

Я сузил его до проблемы NTLM, потому что, если я удалю директивы Centrify, виртуальный хост на основе имени будет работать так, как я ожидал. Я попытался разместить тег каталога внутри каждого виртуального хоста, я также попытался использовать тег местоположения, но мне не удалось добиться успеха.

После дополнительного исследования проблем с конфигурацией Apache не было. Кажется, что браузер передает NTLM, а Apache его получает, но Centrify не проверяет его должным образом. Теперь мне нужно выяснить, где здесь поломка, но это уже другая тема.

Я бы начал с создания двух отдельных виртуальных хостов, которые работают, как ожидалось, а затем вернусь к гибридному разнообразию путем пошаговых изменений.

Я подозреваю, что ваши 2 VirtualHosts решают что-то вроде этого;

<VirtualHost ipaddress:443>
    Servername "hostname.fqdn"
    DocumentRoot "/var/www/"

    SSLEngine on
    SSLCertificateFile  /path/to/cert.crt
    SSLCertificateKeyFile   /path/to/cert.key

<Directory "/var/www">
    Options Indexes FollowSymLinks

    SSLRequireSSL

    AllowOverride None

    Order allow,deny
    Allow from all
</Directory>

<Directory "/var/www/project1">
    AuthType CENTRIFYDC

    EnableBasicAuth     false
    EnableKerberosAuth  false
    EnableNtlmAuth      true

    Require group       required_ad_group
</Directory>


</VirtualHost>

<VirtualHost ipaddress:443>
    ServerName "project1.domain"
    DocumentRoot "/var/www/project1"

    SSLEngine on
    SSLCertificateFile  /path/to/cert.crt
    SSLCertificateKeyFile   /path/to/cert.key



<Directory "/var/www/project1">
    AuthType CENTRIFYDC

    EnableBasicAuth     false
    EnableKerberosAuth  false
    EnableNtlmAuth      true

    Require group       required_ad_group
</Directory>

</VirtualHost>

Поэтому я бы протестировал что-то подобное, а затем переместил бы их из подкаталогов друг друга и посмотрел, какие директивы конфликтуют.