尝试在 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 搜索找到这里...