
Пытаюсь поднять сервер LAMP на Windows AD и заставить работать сквозную аутентификацию. Одна загвоздка (которая может быть не такой уж большой проблемой, как я ее себе представляю): имя хоста и размещенный URL НЕ совпадают: имя хоста LAMP — intranethost.mspca.org
, размещенный URL —https://testintranet.mspca.org
AD — это уровень леса/домена 2012R2.
LAMP — это Debian 11.8 с mod_auth_gssapi, установленным с Apache. На LAMP НЕ установлена Samba, и он НЕ является членом домена AD (не был уверен, что это необходимо).
Создал файл keyspan из Windows DC со следующим содержимым:
ktpass -princ HTTPS/[email protected] -mapuser [email protected] -pass ******** -ptype KRB5_NT_PRINCIPAL -out testintranet-spn.keytab
Мой мир корректно добавлен в krb5.cnf, kinit из LAMP проходит проверку блестяще.
Apache conf (на основе руководства по адресуhttps://www.jfcarter.net/%7Ejimc/documents/bugfix/41-auth-kerb.html):
<IfModule !mod_auth_gssapi.c>
LoadModule auth_gssapi_module /usr/lib64/httpd/modules/mod_auth_gssapi.so
</IfModule>
<VirtualHost *:80>
ServerName testintranet.mspca.org
# Redirect permanent / https://testintranet.mspca.org/
</VirtualHost>
<VirtualHost *:443>
SSLEngine On
SSLCertificateFile /etc/ssl/certs/star_mspca_org.crt
SSLCertificateKeyFile /etc/ssl/private/star_mspca_org.key
ServerAdmin [email protected]
ServerName testintranet.mspca.org
DocumentRoot /var/www/html/wordpress/
<Directory "/var/www/html/wordpress/">
AllowOverride All
AuthType GSSAPI
AuthName "GSSAPI Single Sign On Login"
GssapiSSLonly On
GssapiAllowedMech krb5
GssapiBasicAuth On
GssapiCredStore keytab:/etc/apache2/testintranet-spn.keytab
GssapiLocalName On
BrowserMatch Windows gssapi-no-negotiate
Require valid-user
GssapiNegotiateOnce on
</Directory>
ErrorLog ${APACHE_LOG_DIR}/wordpress.error.log
CustomLog ${APACHE_LOG_DIR}/wordpress.access.log combined
LogLevel info auth_gssapi:debug ssl:warn
</VirtualHost>
Сама аутентификация на самом деле работает, но я все еще получаю начальное приглашение на вход на сайт. Он не переносит текущие учетные данные в сеанс. Я добавил все изменения сайта (http/s, короткое имя, FQDN) в GPO для страницы уровня безопасности интрасети, но Chrome все еще упрямо отображает диалоговое окно входа. Только 'error' в журналах Apache — это всегда полезноNO AUTH DATA Client did not send any authentication headers
Переключение GssapiBasicAuth
в положение «ВЫКЛ» устраняет диалоговое окно, но я сразу получаю 401 Unauthorized, так что это как будто его даже нетпытающийсядля передачи заголовков...
Какие-либо предложения?
решение1
Этот малыш:
BrowserMatch Windows gssapi-no-negotiate
Клянусь, я видел нанесколько сайтов«Если у вас нет этой строки, клиенты Windows работать не будут...»
Я взял эту линиювне, теперь это работает на 100%, как и ожидалось. Аутентификация проходит от текущих пользователей Windows, вошедших в систему (через Chrome на внутренний хост FQDN), просто отлично.
На всякий случай, если в будущем поиск в Google приведет кого-нибудь сюда...