2016-12-28 72 views
1

在我的SSO项目中集成了Kerberos身份验证。遇到一个奇怪的场景。Kerberos SPN获取缓存在Windows服务器上?

我做了一个新用户并附加了一个SPN。按照this question上的步骤进行操作。我的意思是: -

  1. kinit用户名 - 然后输入密码给我的信息,票证被保存。
  2. kinit spn(int格式为HTTP/FQDN) - 然后输入密码给我留言,勾选已保存。

一段时间后,我决定再次尝试这个结束了,所以我用命令

setspn -D spn username 

脱离从用户名SPN。然后我从AD中删除了这个用户(用户名)。

接下来,我创建了一个新用户say username1,并按照this question的规定注册了与上述步骤相同的spn,以便为此新用户注册。

现在执行kinit USERNAME1 - 并输入密码,给那票保存该消息,但是使用kinit SPN - 并输入密码给我的错误

client not found in Kerberos database. 

注意,如果我使用一切正常不同的(新) SPN。

所以问题是,Windows服务器是否有某些缓存,其中一些链接仍然存在,因此我无法再次使用该spn?或者我从用户中分离出spn时犯了一些错误?

感谢, 尼基尔

+0

我发现在成功之前通过_setspn_或_ktpass_命令将新的SPN与用户名链接起来后,可能会长达5分钟的延迟。我认为这是由于AD复制,而不是一些缓存机制。您使用_setspn -D_正确地从原始用户名分离了SPN。继续并立即运行带有SPN的kinit用户名1 - 现在是否成功或失败?语法是:kinit -k -t path \ to \ keytab HTTP/FQDN –

+0

请考虑在您的问题中添加_spn_,_active-directory_和_kdc_的其他标记。 –

+0

嘿,我没有尝试kinit用户名1 - 这工作正常,并且kinit HTTP/FQDN失败,找不到客户端,kinit -k -t path \ to \ keytab HTTP/FQDN失败,出现KrbException:没有可用的default_tkt_enctypes类型的键 –

回答

0

回顾你在聊天中写道,以及完整的历史问题之后,这个问题实际上是两个问题。 (1)在创建密钥表之前,您需要始终删除正在使用的SPN。 (2)在ktpass.exe密钥表创建命令中,您需要映射用户使用HTTP/vinw12sec5225.eqsectest.local的SPN,而不是短登录名krbspn。另外,我只会做一个观察 - 你不需要将SPN放在所有大写字母中。这使得它很难阅读,但为了连续性,我没有改变这一点。只有Kerberos领域应该全部大写。根据您所提供的信息,来解决这种情况下,应执行以下命令:

  1. setspn -D HTTP/VINW12SEC5225.EQSECTEST.LOCAL krbspn
  2. ktpass /princ HTTP/[email protected] /ptype krb5_nt_principal /crypto All /mapuser [email protected] /out c:\ticket\krbspn.keytab -kvno 0 /pass [email protected]
  3. klist -e -k -t c:\ticket\krbspn.keytab

对于一个参考,我展示了如何一个例子在Microsoft Active Directory用作目录服务时创建密钥表:Kerberos Keytabs – Explained。我还提供了每个ktpass.exe语法参数的附加说明。

为了帮助解决上述步骤后仍然可能出错的问题,请使用Notepad ++(非常规记事本)右键单击并编辑您的keytab文件,只需复制keytab文件的内容(不要做任何更改)然后检查结果。密钥内部将被加密 - 没关系,看看SPN是如何在密钥表中制定的。它应该与AD帐户上显示的SPN相匹配。当这些不匹配时,你会得到“在Kerberos数据库中找不到客户端”错误。同时确保应用程序服务器配置指向正确的keytab文件,并在有关keytab的任何内容发生更改时重新启动应用程序服务。

+0

更新你嗨,所以我尝试这样做,仍然得到错误:-(异常:KRB_ERROR 6客户端在Kerberos数据库中找到(6 )客户端不foun d在Kerberos数据库中 KrbException:客户端没有在Kerberos数据库中找到(6) –

+0

我开始相信这可能与我的服务器虚拟机本身的问题..你怀疑同??我应该给这个一个尝试一些不同的环境 –

+0

我增加了更多的答案,关于为何“客户端在Kerberos数据库中找不到”错误可能是未来 –