Kerberos 事件 4 服务器名称显示用户名

Kerberos 事件 4 服务器名称显示用户名

我们有一个使用 Httplistener 并使用 Kerberos 验证请求的 .Net Windows 服务。当用户通过浏览器连接时,用户事件日志中的错误显示 Kerberos 事件 ID 4:

Kerberos 客户端从服务器收到 KRB_AP_ERR_MODIFIED 错误$用户名$。使用的目标名称为 HTTP/$servername$.$domain$.com.au。这表示目标服务器无法解密客户端提供的票证。当目标服务器主体名称 (SPN) 不是在目标服务正在使用的帐户上注册时,可能会发生这种情况。请确保目标 SPN 仅在服务器使用的帐户上注册。如果目标服务帐户密码与 Kerberos 密钥分发中心为该目标服务配置的密码不同,也会出现此错误。请确保服务器上的服务和 KDC 都配置为使用相同的密码。如果服务器名称不是完全限定的,并且目标域 ($domain$.COM.AU) 与客户端域 ($domain$.COM.AU) 不同,请检查这两个域中是否存在同名的服务器帐户,或使用完全限定的名称来标识服务器。

由于某种原因,它报告的服务器是运行该服务的用户。第一行:

Kerberos 客户端从服务器收到 KRB_AP_ERR_MODIFIED 错误$用户名$

每个网站(包括 Server Fault)都修复了与 SPN 问题相关的此错误,但错误中总是包含服务器名称。我找不到带有用户名的上述消息。

我们尝试了不同的用户,它改变了错误消息的上述部分。所有域帐户都有相同的问题。如果我们以本地系统帐户运行服务,则不会出现此问题,但这会导致服务出现其他问题(它需要域帐户才能获得其他权限)。我们没有,也从未有过与我们尝试过的用户名同名的服务器。

有人见过用户名出现在这里的问题吗?如何解决?

所有服务器都是 Windows 2012(不是 R2)。

答案1

很高兴你解决了自己的问题,但听起来你并不明白你所做的事情为什么能解决问题。

归根结底,需要在适当的对象上设置 SPN。听起来你已经在 AD 中运行该服务的计算机对象上设置了 SPN。这就是为什么如果你将服务更改为以 SYSTEM 身份运行,一切就会开始正常运转。但如果你将其更改为以域用户身份运行,则需要将 SPN 移至该用户。重要的是你移动它(读作:从计算机帐户中删除它),而不仅仅是复制重复的 SPN 会造成破坏。

答案2

在这里找到了解决方案:http://blogs.technet.com/b/dcaro/archive/2013/07/04/fixing-the-security-kerberos-4-error.aspx

我跑了:

setspn -A HTTP/$servername$.$domain$.com.au $username$

问题就解决了

相关内容