我正在尝试设置SPN并为tomcat kerberos spnego创buildkeytab文件单点login。
运行tomcat7的服务器是ubuntu-ad1.wad.eng.hytrst.com,KDC是kerberos.wad.eng.hytrust.com,域名是WAD.ENG.HYTRUST.COM,使用我的广告用户名称[email protected] .HYTRUST.COM machiene的AD帐户是[email protected]
首先我创build一个用户名与spn关联(会喜欢解释为什么我需要这样做?):
setspn HTTP/ubuntu-ad.wad.eng.hytrust.com [email protected]
然后,我创build一个keytab复制到web服务器:
ktpass /out tomcat.keytab /mapuser [email protected] /crypto ALL /pass * /ptype KRB5_NT_PRINCIPAL
那么我将它复制到networking服务器,并使用ktutil将其与/etc/krb5.keytab合并。
当我尝试用kinittesting这个我不能使它成功地从密钥表中读取:
hytrust@ubuntu-ad1:/usr/share/tomcat7/conf$ sudo kinit -k -t /home/hytrust/tomcat.keytab http/[email protected] kinit: Client not found in Kerberos database while getting initial credentials hytrust@ubuntu-ad1:/usr/share/tomcat7/conf$ sudo kinit -k -t /home/hytrust/tomcat.keytab HTTP/[email protected] kinit: Client not found in Kerberos database while getting initial credentials hytrust@ubuntu-ad1:/usr/share/tomcat7/conf$ sudo kinit -k -t /home/hytrust/tomcat.keytab [email protected] kinit: Client not found in Kerberos database while getting initial credentials hytrust@ubuntu-ad1:/usr/share/tomcat7/conf$ sudo kinit -k -t /home/hytrust/tomcat.keytab ubuntu-ad1.wad.eng.hytrust.com kinit: Client not found in Kerberos database while getting initial credentials hytrust@ubuntu-ad1:/usr/share/tomcat7/conf$ sudo kinit -k -t /home/hytrust/tomcat.keytab [email protected] kinit: Key table entry not found while getting initial credentials hytrust@ubuntu-ad1:/usr/share/tomcat7/conf$ sudo kinit -k -t /home/hytrust/tomcat.keytab [email protected] kinit: Client not found in Kerberos database while getting initial credentials hytrust@ubuntu-ad1:/usr/share/tomcat7/conf$ sudo kinit [email protected] for [email protected]: kinit: Preauthentication failed while getting initial credentials hytrust@ubuntu-ad1:/usr/share/tomcat7/conf$ sudo kinit [email protected]
密码为[email protected]:hytrust @ ubuntu-ad1:/ usr / share / tomcat7 / conf $
“未在Kerberos数据库中find客户端”与“未在Kerberos数据库中find客户端”有什么不同? 这些错误究竟意味着什么?
(这个问题有点老,但我的分析可能会帮助其他人)
你似乎缺less一些理解,因此不正确执行命令。 我假设你的KDC实际上是一个Active Directory KDC。 从您的描述中不完全清楚。
首先,在活动目录kerberos中(与标准的MIT / Heimdal Kerberos相反),服务主体名称(SPN – 运行机器的服务)需要连接到用户主体名称(UPN,位于机器后面的用户)。 因此,映射。
setspn将通过将ldap属性添加到用户的cn来将服务主体名称添加到用户
ktpass会输出您的密钥标签,并将UserPrincipalName重写为username/fully.qualified.domainname@REALM。
通过执行kinit -k -t key.tab principal将在kinit -k -t key.tab principal的key.tab文件和主动目录UPN中执行查找。 如果在密钥标签中找不到主体,将会出现“获取初始凭证时未find密钥表条目”等错误。 如果它在目录中找不到,它会给“在Kerberos数据库中找不到客户端,而获得初始凭证”。
现在谈谈你的问题。 看来你错过了/ princ参数给ktpass。 这是实际获取关键选项卡文件中的主体并获取映射权限所必需的。 我不知道klist -k keytab给出了什么。
所以你的线路应该是这样的(包括把REALM放在正确的位置:
setspn HTTP/ubuntu-ad.wad.eng.hytrust.com aulfeldt ktpass /princ HTTP/[email protected] /out tomcat.keytab /mapuser aulfeldt /crypto ALL /pass * /ptype KRB5_NT_PRINCIPAL
额外:如果您使用SAMBA 4与samba工具来执行此操作,您将需要手动将userPrincipalName更改为(在本例中):HTTP/[email protected]。 COM这是因为samba的密钥标签生成不会更新UPN,因此在查找时会出现错误。
在旁边注意:一个活动目录机器名是COMPUTER $(标记$)。 你的似乎closures。
尝试在Windows中使用“setspn -Q”以查看SPN是否已正确创build:
C:\Windows\System32>setspn -Q HTTP/util01.example.com CN=util01,OU=Servers,DC=example,DC=com HTTP/util01.example.com Existing SPN found!
然后,检查keytab文件以查看它是否匹配:
[apache@util01 ~]$ klist -e -k /etc/httpd/conf/auth_httpd.keytab Keytab name: FILE:/etc/httpd/conf/auth_httpd.keytab KVNO Principal ---- -------------------------------------------------------------------------- 3 HTTP/[email protected] (DES cbc mode with RSA-MD5)
如果它们不匹配(除了@ EXAMPLE.COM realm位),请修复它,以便通过使用ktpass重新导出keytab。
如果它们匹配,则应该能够获得密钥表中指定的完全SPN的票(不包括领域):
$ sudo kinit -k keytab.file HTTP/util01.example.com