Kerberos 双跳

Kerberos Double Hop

我们遇到了臭名昭著的 Kerberos 双跃点问题。

这是一个全新的域,正在从另一个以前可以进行模拟和委派的提供商迁移而来。我们已将 OS 升级到最新的 SQL 服务器 (2017)。

WPF 应用程序(使用域信用)-> Web 服务(IIS 10 上的 WCF 应用程序)-> SQL 2017(命名实例)

Web 服务在域帐户下 运行。 Web 服务注册了一个 spn,匿名身份验证被禁用,形式身份验证,ASP.NET 模拟和 Windows 身份验证被启用。提供商是 "Negotiate and NTLM," "Kernal Mode" 被禁用,"Use App Pool credentials" 被启用。 SPN 创建:

HTTP/<url of web service> <AppPool Creds> 

我们能够通过远程计算机上的浏览器登录 Web 服务,输入域凭据并获得预期的响应(显示网页)。 IIS 日志按预期显示域用户凭据。

SQL 服务器是命名实例,运行 在域 creds 下。创建的 SPN:

MSSQLSvc/<fqdn>:<Instance> <SQL Domain Creds>

MSSQLSvc/<sql server netbios>:<Instance> <SQL Domain Creds>

MSSQLSvc/<fqdn>:<port> <SQL Domain Creds>

MSSQLSvc/<sql server netbios>:<port> <SQL Domain Creds>

AD 中的 IIS 应用程序池用户帐户设置为将端口和命名实例的约束委派给 SQL 服务器。

通过软件登录web服务(WPF调用WCF服务,不调用数据库),正常响应。

当使用数据库调用通过软件登录到 Web 服务时,sql 探查器显示匿名登录。在 IIS 框上启用 Kerberos 日志记录后,收到以下错误:

Error Code: 0xd KDC_ERR_BADOPTION

Extended Error: 0xc0000225 KLIN(0)

Server Name: MSSQLSvc/<sql server fqdn>:49942

Target Name: MSSQLSvc/<sql server fqdn>:49942@<domain.com>

我们也尝试了无约束委派,但得到了同样的结果。

SETSPN -X 显示没有重复项。

提前感谢您的帮助!

当其他所有方法都失败时,您确实花了很多天来解决这个问题并阅读了 Internet 上的每篇文章:

REBOOT

是的。这就是解决办法。重新启动作为委派权限的服务器的 IIS 服务器,解决了这个问题。

对于那些希望快速轻松地在 IIS 和 SQL 实例之间设置约束委派的人,两者都 运行 在自定义域凭据下,请完全按照上述设置并重新启动。

祝福。