首页 文章

Kerberos SPN缓存在Windows服务器上?

提问于
浏览
1

在我的SSO项目中集成了Kerberos身份验证 . 碰到了一个特殊的场景 .

我创建了一个新用户并附加了一个SPN . 按照this question的步骤操作,让一切正常 . 我的意思是: -

  • kinit用户名 - 然后输入密码给了我保存故障单的消息 .

  • kinit spn(以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时我是否犯了一些错误?

谢谢,尼基尔

1 回答

  • 0

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

    • setspn -D HTTP/VINW12SEC5225.EQSECTEST.LOCAL krbspn

    • ktpass /princ HTTP/VINW12SEC5225.EQSECTEST.LOCAL@EQSECTEST.LOCAL /ptype krb5_nt_principal /crypto All /mapuser krbspn@EQSECTEST.LOCAL /out c:\ticket\krbspn.keytab -kvno 0 /pass eQ@12345

    • klist -e -k -t c:\ticket\krbspn.keytab

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

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

相关问题