![我的问题 :](https://linux22.com/image/684167/%E6%88%91%E7%9A%84%E9%97%AE%E9%A2%98%20%EF%BC%9A.png)
我的问题 :
- 在 IIS 应用程序(已激活 Windows 身份验证和 Kerberos)上从装有 IE 11 的 Windows Server 2012 调用 URL 失败:在 3 次获取正确密码后,我收到 401 错误(未授权),并且我可以在安全事件查看器中看到以下日志:
Kerberos 客户端从服务器 servername$ 收到 KRB_AP_ERR_MODIFIED 错误。使用的目标名称为 HTTP/url.xxx.yyy.zzz。这表明目标服务器无法解密客户端提供的票证。当目标服务器主体名称 (SPN) 在目标服务正在使用的帐户以外的帐户上注册时,可能会发生这种情况。确保目标 SPN 仅在服务器使用的帐户上注册。如果目标服务帐户密码与 Kerberos 密钥分发中心为该目标服务配置的密码不同,也会出现此错误。确保服务器上的服务和 KDC 都配置为使用相同的密码。如果服务器名称不是完全限定的,并且目标域 (xxx.yyy.zzz) 与客户端域 (xxx.yyy.zzz) 不同,请检查这两个域中是否存在同名的服务器帐户,或使用完全限定的名称来标识服务器。
- 从另一个 Windows Server 2012 调用相同的 URL 会出现相同的错误消息
- 从 Win7 下的控制台调用相同的 URL 运行完美
看起来,我错过了服务器上的安全设置,但我想知道哪一个?
一些上下文信息
我的 Web 应用程序自动部署在 2 台不同的服务器 (WS 2012 R2) 上。在每台服务器安装结束时,都会自动启动一个脚本来检查所有 URL 是否可以使用 http 和 https。因此,我非常希望 URL 检查在服务器本身上执行,而不是在其他控制台上执行。
其他研究
- 我已检查 SPN,它似乎配置正确
- 目标域和客户端域相同
- 使用 Wireshark,似乎我在从控制台调用 URL 时使用了 NTLM 身份验证:
621 24.297697 IpSrc IpDest HTTP 1014 HTTP/1.1 401 未授权,NTLMSSP_CHALLENGE (text/html)
- 从我的服务器使用 Wireshark:
1216 18.322929 IpSrc IpDest KRB5 250 KRB 错误:KRB5KDC_ERR_PREAUTH_REQUIRED
答案1
经过一番调查,问题确实出在配置问题上:按照指南这里我设法使用 Kerberos 进行身份验证。
总结所有的行动,你需要:
- 在 IIS 上启用 Windows 身份验证
- 创建账户服务
- 为您要使用的主机地址创建 SPN
- 将此服务与用于执行应用程序的应用程序池关联
- 修改 AD 中帐户服务的委托参数(
Trust this computer for delegation for any service
) - 修改 IIS 启用
UseKernelMode
和useAppPoolCredentials
最后一件事花费了我一些时间:我不知道是否有缓存或复制机制,但这些参数的改变不是立即的......