我的事件日志中有0x19 KDC_ERR_PREAUTH_REQUIRED

所以我有一个服务器,并且每次用户或服务帐户login到计算机时,都会在系统日志中生成一个错误事件:

A Kerberos Error Message was received: on logon session DOMAIN\serviceaccount Client Time: Server Time: 12:44:21.0000 10/9/2012 Z Error Code: 0x19 KDC_ERR_PREAUTH_REQUIRED Extended Error: Client Realm: Client Name: Server Realm: DOMAIN Server Name: krbtgt/DOMAIN Target Name: krbtgt/DOMAIN@DOMAIN Error Text: File: e Line: 9fe Error Data is in record data. 

所以当然我把这个search了一下,我得到的唯一信息就是“它不一定表示有问题,你通常可以忽略它”。

那么,哎呀,那太好了,但是这些错误每分钟都会将我的系统日志发送给我,我真的很想让他们停下来。 有任何想法吗?

从Microsoft AskDS博客:

KDC_ERR_PREAUTH_REQUIRED

如果您在跟踪中看到此错误,则不表示存在任何问题。 客户端请求了一张票,但没有包含预先validation的数据。 您通常会看到与数据和域控制器签发票证相同的请求。 Windows使用这种技术来确定支持的encryptiontypes。

我不能帮你阻止他们; 恐怕我是一个Linux的人。 我至less可以解释他们。 理解这个消息需要对Kerberos身份validation的工作方式进行一点说明。

基本的Kerberos身份validation过程是让客户端从KDC请求一个encryption的TGT,然后用它的本地密钥解密。 然而,天真的执行,这使得攻击者可以为你的领域中的每个用户下载TGT,然后尝试在攻击者的闲暇时间通过蛮力攻击来解密他们。 因此Kerberos添加了一种称为预authentication的机制。

预身份validation的工作方式是,KDC在收到TGT请求时发回预authentication挑战,而不是仅仅发回TGT。 预authentication挑战可以采取多种forms,但最常见的是要求客户端发送当前在客户端密钥中encryption的时间。 然后KDC确认客户端可以在发送TGT之前做到这一点(这表明了客户端密钥的一些知识)。

然而,部分原因是因为客户端不知道什么样的预authentication挑战将被发送,所以客户端总是发送基本的TGT请求,而KDC则因为预authentication挑战而拒绝客户端。 这些日志消息是Active Directorylogging的事实,它得到一个TGT请求,无需预先authentication,并发回挑战。

你的猜测和我的一样好,就是为什么要logging这个,因为这是协议的一个正常部分,而且不是非常有趣,但是所有基于Linux的KDC都做同样的事情。

我在我的服务器上有同样的问题,这是填补我的服务器的错误。 我在Microsoft支持知识库( https://support.microsoft.com/en-us/kb/262177 )中find了此registry项( HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Lsa\Kerberos\Parameters )并将其删除,现在它似乎工作很好。

您可以通过选中“Active Directory用户和计算机”中服务帐户的“帐户”选项卡上的用户帐户属性中的“不要求Kerberos预validation”框来阻止此错误。