Авторизация 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 не проверяет его должным образом. Теперь мне нужно выяснить, где здесь пробой, но это другая тема.