【问题标题】:WWW-Authenticate uses NTLM and not KerberosWWW-Authenticate 使用 NTLM 而不是 Kerberos
【发布时间】:2014-07-15 11:10:06
【问题描述】:

我在 Windows Server 2008 上运行 NodeJS 服务器。

服务器没有做太多,但我将标头设置为 401,WWW-Authenticate Negotiation,我知道可以使用他的默认 Kerberos 身份验证,或者如果它不可用,则使用 NTLM。

我下载了 fiddler,发现当我尝试访问服务器时,它会尝试使用 NTLM(提示我输入用户名和密码)而不是 Kerberos 进行身份验证,即使计算机与服务器在同一个域中并且当我这样做时运行命令“klist”它确实告诉我他有令牌,这意味着他已经通过 Kerberos 进行了身份验证(不是吗?)。

我的问题是如何让它通过 Kerberos 而不是 NTLM 进行身份验证 - 为什么他首先要使用 NTLM?

有什么想法吗?

【问题讨论】:

  • 服务器是否注册了SPN?
  • 我认为是,但我并没有真正明白我应该怎么做。我的意思是我做了 spnset 但在我这样做之后,我该怎么办?老实说,我什至不确定我做对了。

标签: kerberos www-authenticate


【解决方案1】:

您的客户端可能无法获得该机器的服务器票证。使用 Wireshark 并检查 Kerberos TGS-REQ 消息。请搜索我的类似答案,我已经能够在这种情况下提供帮助。

【讨论】:

  • 我似乎找不到任何与 Kerberos TGS-REQ 相关的内容。它只是执行 401 Unauthorized 然后 NTLMSSP_NEGOTIATE。
  • 谁在做 NTLMSSP_NEGOTIATE?
【解决方案2】:

您很可能需要阅读 Kerberos。您可能有一个 TGT (ticket granting ticket) ,它证明您通过了 AD (KDC) 的身份验证。对于实例化的特定服务/服务器,您仍然需要 ST(服务票证)。 http/服务器名。为此,您需要为该服务注册一个 SPN。 SPN 必须注册到将解密 ST 的帐户。

Fiddler 表明您没有发送 ST 表明您没有收到。您可能需要一个嗅探器,而不仅仅是 Fiddler。您将看到,在端口 88 上,您的工作站尝试从 KDC 请求 ST,然后失败,然后回退到 NTLM。你想看到 ST req 得到一个 ST。

这是一个很好的开端,尽管来自 2000 年 http://technet.microsoft.com/en-us/library/bb742431.aspx

要获得更有意义的帮助,我需要查看您的应用 URL、通过 setspn -l 获得的 SPN 信息以及服务器主机名。

【讨论】:

  • 我正在浏览 ip 地址为“10.0.0.19:3000”的应用程序,这样好吗?我注册了一个像这样的SPN“setspn -s HTTP/kerb.name.com:3000 kerb”。这就是 setspn -l 给出的:“CN=the serv, CN=Computers,DC=name,DC=com: http/kerb.name.com 和 DC: \\WIN-7II7OV492KP.name.com 的注册 ServicePrinicpalNames。信息够不够?
  • SPN 需要与您的 URL 的 FQDN 部分对齐,因为您在浏览器中使用它。您可能还想做一个 setspn -s HTTP/10.0.0.19:3000 遏制。该帐户是否正在运行您的 Web 服务器?这是否在 IIS 之上运行?如果您正确设置 spn,您至少会从 KDC 获得它。如果你在那之后失败了,那么你就知道你的网络服务器运行的身份存在问题。
  • 是的,帐户限制是运行服务器的帐户。我还将下载嗅探器并尝试更好地设置 SPN 并查看它的作用。之后我会告诉你的。非常感谢。
  • 没有注意到您询问它是否在 IIS 上运行。目前是,但我希望它在 linux 机器上运行。我应该做些什么不同的事情吗?
  • 哦,Linux。我看到一些 nodeJS 遏制包。您只需按照他们的说明设置服务帐户和密码,或创建密钥表。
【解决方案3】:

由于这没有被标记为已修复,我想我会添加一个对我有用的解决方案。 YMMV 在我的环境中,我们有多个具有信任关系的森林。

在我的例子中,运行浏览器(并因此进行 HTTP GET)的用户在 DOMA 中,但 Web 服务器加入了 DOMB。当客户端试图找到HTTP/webserver.domainb.example.com的SPN时,它正在DOMA中寻找它。

错误地假设由于 DOMA 和 DOMB 之间存在双向信任关系,它会想办法查看 DOMB 并这样做。不幸的是它没有,你必须Configure Kerberos Forest Search Order。这可以在 Windows 7 上按客户端(计算机配置 → 策略 → 管理模板 → 系统 → Kerberos → 使用森林搜索顺序)或每个 KDC(计算机配置 → 策略 → 管理模板 → 系统 → KDC → 使用森林搜索顺序)完成Windows Server 2008R2。

注意:Michael-O 的建议是使用 Wireshark 并查找 TGS-REQ 消息,这让我非常感谢他找到了 KFSO 设置。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-01-10
    • 1970-01-01
    • 1970-01-01
    • 2017-11-26
    • 2014-03-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多