IT为我提供了服务帐户和服务主体.在这个例子中,我将其称为HTTP/mysite.mycorp.com@MYCORP.COM.他们为我提供了一个用于所述主体的keytab文件,其中包括在AD服务器上运行名为ktpass.exe的工具.
我已经验证了AD / KDC的KVNO和keytab文件匹配.一切都很好.
主机名有一个正确的DNS A记录,以及IP的正确PTR记录.两台服务器都是时间同步的.
我可以使用已发布的keytab文件从AD / KDC请求上述服务主体的票证,如下所示:
kinit -k -t http.keytab HTTP/mysite.mycorp.com@MYCORP.COM@H_301_11@这很有效.我获得了一张票,我可以使用这张票来查询AD / LDAP目录. keytab也适用于运行Single Signon Apache站点,这部分是本练习的目标.
半小时过去了.
Client not found in Kerberos database@H_301_11@我无法作为服务主体进行身份验证,就像在AD服务器上删除了主体一样.
现在它变得奇怪,至少对我来说:
根据请求,AD管理员再次运行ktpass.exe工具,为我的服务构建一个新的密钥表文件. KVNO(密钥版本号)在服务器上递增,导致我们的Apache测试服务器停止验证Kerberos单点登录.我目前的配置是预期的.令我们所有人感到惊讶的是,现在kinit命令再次起作用.我们又买了半个小时,然后又停止了工作.
我们的IT部门在这里不知所措,他们猜测这是AD服务器本身的问题.我在考虑它的配置,但据他们说,他们的设置中没有任何半小时的限制.
我已经按照http://www.grolmsnet.de/kerbtut/(参见第7节),但在我找到的所有文档中,该方法似乎相同.我没有找到任何有关服务主体的时间限制的参考.
编辑:这似乎是一个复制问题.虽然复制过程中未报告任何错误,但服务帐户的SPN值已从“HTTP/mysite.mycorp.com@MYCORP.COM”更改(还原?)到“name-of-service-account@mycorp.com “30分钟后.
解决方法
keytab文件仅替换密码身份验证.密码在文件中编码,这些字节用于KDC的身份验证质询.服务帐户上的任何密码更改都将使keytab身份验证无效,并且还会增加kvno编号.
要确认服务帐户SPN可用,我经常使用服务帐户密码进行身份验证:
kinit HTTP/mysite.mycorp.com@MYCORP.COM@H_301_11@如果失败,要确认服务帐户未被禁用,请尝试基本身份验证:
kinit account@H_301_11@如果无法进行身份验证,只需删除该帐户并使用其他登录名创建一个新帐户以避免麻烦.
另一个软件很可能 – 例如另一个系统具有针对同一SPN的旧生成的密钥表 – 尝试在此服务帐户上进行身份验证并因密码无效而禁用该帐户.
设置Kerberos SSO时,过快的操作可能会导致Active Directory中出现不一致.在配置过程中遇到的一般原则是遵循以下步骤:
>删除测试和生产系统的“旧”或“失败”服务帐户
>使用kvno检查您希望配置的SPN在领域中不再存在
>使用setspn -X检查多个帐户没有冲突的SPN
>为每个系统创建一个服务帐户,专用于一个完全合格的SPN,具有全新的登录名
>阻止服务帐户更改密码和密码到期
>让我们等待一段时间进行DC同步
>生成keytab时将密码设置为ktpass选项
>使用setspn -l帐户检查FQDN SPN和别名以下是在DC上配置服务帐户的一组命令:
ktpass -princ HTTP/mysite.mycorp.com@MYCORP.COM -mapuser mysiteAccount@MYCORP.COM -crypto RC4-HMAC-NT -ptype KRB5_NT_PRINCIPAL -pass long!$longp2ass3word -out c:\temp\http-mysite-mycorp-com.keytab setspn -a HTTP/mysite mysiteAccount setspn -l mysiteAccount@H_301_11@如果在MMC和运行ktpass之间的不同DC上执行操作太快,无法在管理命令行中生成keytab,则DC同步可能会导致意外的结果,如您所描述的结果.因此,让我们在帐户创建之间等待一段时间,然后再使用ktpass和任何其他setspn命令.
并且在Linux上运行以检查一切是否正常的命令:
kinit mysiteAccount@MYCORP.COM kinit HTTP/mysite.mycorp.com@MYCORP.COM kinit -k -t http-mysite-mycorp-com.keytab HTTP/mysite.mycorp.com@MYCORP.COM kvno HTTP/mysite.mycorp.com kvno HTTP/mysite@H_301_11@