【问题标题】:Kerberos Double HopKerberos 双跳
【发布时间】:2018-10-07 11:37:53
【问题描述】:

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

这是一个全新的域,它是从以前可以使用模拟和委派的其他提供商迁移而来的。我们已将操作系统升级到最新的 SQL 服务器 (2017)。

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

Web 服务正在域帐户下运行。 Web 服务已注册 spn,匿名身份验证和表单身份验证一样被禁用,ASP.NET 模拟和 Windows 身份验证已启用。提供程序是“协商和 NTLM”,“内核模式”已禁用,“使用应用程序池凭据”已启用。已创建 SPN:

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

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

SQL 服务器是一个命名实例,在域凭据下运行。创建的 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 profiler 显示匿名登录。在 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 不显示重复项。

提前感谢您的帮助!

【问题讨论】:

  • KDC_ERR_BADOPTION 通常意味着中间服务器(在这种情况下为 IIS 服务器)存在问题。您可以删除 NTLM 作为提供者吗?您甚至不希望将其作为一种选择。 NTLM 可能会误报 IIS 服务器配置正确。
  • 好的。已删除 NTLM。 IIS 重新启动。同样的问题。使用域凭据登录网站并继续像以前一样工作。还测试了没有数据库命中的软件,它也像以前一样工作。我同意这个问题与中间服务器有关。我注意到错误消息没有正确粘贴,所以我更新了它。
  • “这是一个全新的域”。您的某些服务器是否仍在旧的 AD 域中?如果是这样,请检查它们的兼容性级别。例如,如果一个 AD 在 2003 兼容模式下运行,那么它将不支持 Kerberos 票证的某些加密选项。 KDC_ERR_BADOPTION
  • 没有。都是 Windows 2016。域是从头开始而不是迁移。

标签: sql-server windows kerberos iis-10 kerberos-delegation


【解决方案1】:

当所有其他方法都失败了,而您确实花了几天时间解决问题并阅读互联网上的每篇文章:

REBOOT

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

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

最好的祝愿。

【讨论】:

  • 请自行将您的答案标记为已接受。这是允许的。这会将问题标记给其他可能正在搜索相同问题的人。
猜你喜欢
  • 1970-01-01
  • 2013-02-02
  • 1970-01-01
  • 2018-03-02
  • 2011-12-21
  • 2020-01-19
  • 2019-04-12
  • 1970-01-01
  • 2023-03-26
相关资源
最近更新 更多