使用 LAMP GSSAPI/Kerberos 传递 Windows AD 身份验证

使用 LAMP GSSAPI/Kerberos 传递 Windows AD 身份验证

尝试在 Windows AD 上建立 LAMP 服务器并使直通身份验证正常工作。有一个问题(可能没有我想象的那么严重),主机名和托管 URL 不匹配:LAMP 主机名为intranethost.mspca.org,托管 URL 为https://testintranet.mspca.org

AD 是林/域级别 2012R2。

LAMP 是 Debian 11.8,其中 mod_auth_gssapi 与 Apache 一起安装。LAMP 没有安装 Samba,也不是 AD 域的成员(不确定是否有必要)。

使用以下内容从 Windows DC 创建 keyspan 文件:

ktpass -princ HTTPS/[email protected] -mapuser [email protected] -pass ******** -ptype KRB5_NT_PRINCIPAL -out testintranet-spn.keytab

我的领域被正确地添加到了 krb5.cnf 中,并且 LAMP 的 kinit 顺利通过。

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)添加到 Intranet 安全级别页面的 GPO 中,但 chrome 仍然顽固地显示登录对话框。Apache 日志中只有“错误”才是有用的NO AUTH DATA Client did not send any authentication headers

切换GssapiBasicAuth到 OFF 可以消除对话框,但我立即收到 401 Unauthorized,所以它就像没有传递标题...

有什么建议么?

答案1

这个小家伙:

BrowserMatch Windows gssapi-no-negotiate

我发誓,我看到了多个站点“如果没有这行,Windows 客户端将无法工作...”

我接受了那条线出去,现在一切按预期运行。身份验证从当前登录的 Windows 用户(通过 Chrome 到 FQDN 内部主机)顺利通过。

万一将来有人通过 Google 搜索找到这里...

相关内容