Авторизация NTLM с использованием виртуальных хостов Apache NameBased через 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, виртуальный хост на основе имени работает так, как я ожидал. Я пытался разместить тег Directory в каждом виртуальном хосте, я также пытался использовать тег Location, но я не смог добиться прогресса.

2 ответа

Решение

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

Я подозреваю, что ваши 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>

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

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

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