【发布时间】:2014-03-19 23:28:26
【问题描述】:
我遇到了一个让我发疯的问题。我正在尝试在 windows server 2012 作为活动目录服务器、ubuntu 12.04 和 apache 作为 web 服务器以及 windows 7 笔记本电脑作为客户端(所有 3 个都在同一个本地网络上)的组合上实现单点登录。我想我已经正确设置了一切:
我在 AD 服务器上创建了一个 keytab 文件,当从 web 服务器上的 kinit 命令使用它时,我没有收到任何错误,并且我可以确认之后使用 klist 收到了 kerberos 票证。
我已经在网络服务器上的 krb5.conf 文件中设置了 AD-realm,并且由于 kinit 工作,我认为这是正确完成的。
我正在测试的受保护目录在 apache2.conf 中设置如下:
AuthType Kerberos
KrbMethodNegotiate On
KrbMethodK5Passwd 开启
KrbAuthRealms ADREALM.LOCAL
Krb5KeyTab /etc/apache2/test.keytab
KrbServiceName NameOfSPNInKeyTabFile
需要有效用户笔记本电脑已添加到 AD 服务器,登录后执行 klist 时会列出 3 个 KerbTicket。
我已将网络服务器的 IP 地址添加到 IE 11(http 和 https)中的受信任站点列表中。
不过,当我尝试访问网络服务器上的受保护站点时,我不断收到一个要求登录名和密码的框。当我输入这些内容时,我会通过身份验证并访问该站点。
使用 WireShark,我可以确保客户端在被要求进行身份验证时首先发送 NTLM 票证。由于网络服务器需要一个 kerberos-ticket,这会失败,并且浏览器会退回到简单的身份验证,要求输入登录名和密码。收到这些信息后,网络服务器会联系 AD 服务器并验证凭据。因此身份验证有效 - 只是单点登录失败。
所以最大的问题是:为什么浏览器会在这种情况下发送 NTLM-ticket?我已经用 ie,firefox 和 chrome 对此进行了测试,它们都返回 NTLM-ticket。我尝试了不同的 SPN 名称组合,但结果都相同。是否有一些我遗漏的命名约定或其他可能有问题的地方?
【问题讨论】:
-
可能与此问题完全无关,但在多林环境中,不要忘记 KFSO。我已经写好了我的解决方案here。
标签: apache active-directory single-sign-on kerberos ntlm