Kerberos 委派和特定于端口的 SPN

Posted

技术标签:

【中文标题】Kerberos 委派和特定于端口的 SPN【英文标题】:Kerberos delegation and port-specific SPNs 【发布时间】:2013-10-17 21:12:17 【问题描述】:

我有一个系统,我在其中使用带有简单委托的 Kerberos,使用集成的 Windows 身份验证将 AD 用户的凭据从网站转发到下游 HTTP REST 服务。所有服务器都是 Windows Server 2012 R2。

这很好用。

当我开始对运行后端 HTTP 服务的同一台服务器进行 Powershell 远程处理时,问题就出现了。 Enter-PSSession 向目标机器上的 WSMan 服务发出 Kerberos 身份验证请求。 AD 看到这个请求,并使用我的自定义 HTTP 服务运行的身份加密请求的票证,WSMan 服务显然不能使用,并且远程处理失败。

我知道可以强制 IE 执行特定于端口的 SPN 请求(通过 KB908209),但我无法让第二跳(即 IIS 代理请求)执行特定于端口的请求.我也无法让 powershell 在 5985 上为 WSMan 发出特定于端口的请求。

为了让事情更具体:

    客户端浏览器向 ServerA 发出请求。浏览器向 AD 发出 HTTP/ServerA 的 Kerberos 票证请求,该请求被授予然后发送到 ServerA。 ServerA 想要向http://ServerB:15200 发出委托请求。 ServerA 向 AD 请求 SPN HTTP/ServerB 的 Kerberos 票证。它确实向 SPN HTTP/ServerB:15200 发出请求。我想要它。

如果我将 SPN 设置为 HTTP/ServerB:15200,则 IIS 中的简单委派会失败,但 powershell 远程处理工作。如果我将 SPN 设置为 HTTP/ServerB,则简单委派有效,但 powershell 远程处理失败。如果我将 SPN 设置为 HTTP/ServerB:5985,则无法正常工作。

在这一点上我完全被难住了——委托和每个端口的 SPN 似乎不能很好地结合在一起?

【问题讨论】:

【参考方案1】:

您可以通过为 ServerB 设置别名来解决此问题,将 HTTP/ServerBAlias SPN 提供给 IIS 帐户,将 HTTP/ServerB 提供给 PS 帐户,然后让 ServerA 将其请求发送到 ServerBAlias。或者在一个 SPN 中使用 FQDN(例如 ServerB.domain.local),在另一个 SPN 中使用 NETBios(例如 ServerB)。

或者,您可以查看how this person hosted WinRM in IIS with a custom account。

【讨论】:

是的,从 ServerA 到 ServerB 的请求正在使用 15200。如果我使用 IIS 应用程序池标识为 HTTP/ServerB 和 HTTP/ServerB:15200 设置 SPN,则 powershell 远程处理失败。如果我只使用机器标识(网络服务)设置 HTTP/ServerB,PS 远程处理工作但第二个 Kerberos 跃点失败,因为 IIS 没有为 :15200 发出 SPN 请求。 抱歉,我不熟悉 IIS 如何构建目标 Kerberos 身份,或者设置 PS 远程处理的细节。我不明白您如何在同一个端口上提供 HTTP 请求和 PS 远程处理。无论如何,他们正在寻找不同的 SPN,因此您应该能够将 HTTP/ServerB 分配给 IIS 的帐户,并将 HTTP/ServerB:15200 分配给 PS 的帐户。 PS 远程处理和 HTTP 请求不在同一个端口上——PS 远程处理使用 5985 而我使用的是 15200,但是正如你所说的 IIS 和 powershell.exe 如何构建目标 SPN 的详细信息他们对域控制器的请求是问题所在:/ 他们似乎都忽略了目标端口,只是请求普通 HTTP/ServerB 作为请求的 SPN。 @stames 我编辑了我的答案,其中一个选项应该可以工作。 别名不起作用(在后台域控制器仍然查找 ServerB SPN 而不是 ServerBAlias),但我设法成功设置它,其中 PS 远程处理使用 NETBIOS 名称和我的应用程序使用 FQDN。谢谢!【参考方案2】:

您是否将 HTTP/ServerA 的 ms-DS-Allowed-to-Delegate-to 属性设置为 HTTP/ServerB 和 HTTP/ServerB:15200 的列表?

【讨论】:

不,但我使用的是简单(即不受约束)委托。

以上是关于Kerberos 委派和特定于端口的 SPN的主要内容,如果未能解决你的问题,请参考以下文章

使用 SSPI 支持多进程的 kerberos 约束委派

使用 pymssql 的 Kerberos 委派(双跳)

OWIN Cookie 身份验证 - 使用 Kerberos 委派模拟 SQL Server

Kerberos 约束委派与 Linux 上 Java 中的协议转换

无法通过 Safari 使用 Kerberos 约束委派通过 Web 应用程序访问后端 WCF 服务

允许在没有Active Directory信任的情况下进行winhttp委派