在我的网站上为 Kerberos 身份验证苦苦挣扎了很长时间之后,我终于来找你了,因为我迷路了。我目前正在创建一个经典的 PHP 网站,我想通过使用 Kerberos 来实现无缝身份验证。
情况是这样的:
- 我有一个具有 KDC 角色的 Windows 2012R2 域控制器。
- 我有一个 Linux LAMP 服务器(fqdn =
webserver.domain.local
)。 - 我的网站托管在 Linux 服务器上,可以通过 HTTPS 访问,名称如下:
site.domain.local
我主要按照以下说明设置了我的 Kerberos 身份验证:https://serverfault.com/a/753956/506532(我的 SPN 是) 我在 IE 设置中也将其注册为“内联网网站”。HTTPS/[email protected]
site.domain.local
当我使用 kinit 从 Web 服务器检查 kerberos 身份验证是否正常工作时,身份验证成功,但是当我从计算机(当然,它链接到域)访问 site.domain.local 时,它提示我使用 BASIC 进行身份验证。我可以使用我的凭据成功登录,但我认为 kerberos 无法正常工作,我不明白为什么。
访问该网站时,我在 Apache 日志中收到此错误:
gss_accept_sec_context() 失败:请求了不受支持的机制(,未知错误)
启用调试模式后,我收到以下日志:
kerb_authenticate_user 使用用户 (NULL) 和 auth_type Kerberos 输入
kerb_authenticate_user 使用用户 (NULL) 和 auth_type Kerberos 输入
获取 HTTPS/ 的凭证[电子邮件保护]
使用 KRB5 GSS-API 验证客户端数据
客户没有将他们的凭证委托给我们
警告:收到的令牌似乎是 NTLM,Kerberos 模块不支持该令牌。请检查您的 IE 配置。
GSS-API 主要状态:00010000,次要状态:00000000
我搜索了解决方案,每个有这种行为的人都通过在 IE 中将网站设置为“内联网网站”来解决这个问题,但这已经为我完成了......
有人有什么主意吗 ?
答案1
您的 SPN 不正确。应该是HTTP/site.domain.local
- HTTP 和 HTTPS 被视为同一服务类(HTTP)。
- 您不应在 SPN 中包含领域名称(至少对于 Active Directory 而言,不确定其他 Kerberos 实现)。