我的目标:在基于java的Web应用程序上实现SSO。 我的问题:我不是安全人员......
经过一番调查,我发现春天安全kerberos扩展是我需要的(也查看了apache shiro,但只能找到一个登录页面的例子)。
我使用了以下项目中的示例: https://github.com/spring-projects/spring-security-kerberos/tree/master/spring-security-kerberos-sample
我意识到我需要创建一个keytab。当我尝试使用keytab时出现以下错误:
javax.security.auth.login.LoginException: Unable to obtain password from user
查找有关此错误的一些详细信息,我看到它可能来自wrong keytab location,但这不是这里的情况 - 我调试到源代码并看到keytab文件已加载。
所以我决定检查我的密钥表,看看它是否正常。 首先,这是我用来创建keytab的最后一个命令(经过长时间的演变):
ktpass /out http-web.keytab /mapuser MyUser@MYDOMAIN.COM /princ HTTP/MyUser@MYDOMAIN.COM /pass MyPass /ptype KRB5_NT_PRINCIPAL
当然,我使用以下命令为MyUser创建了一个SPN:
setspn -a HTTP/MyUser@MYDOMAIN.COM MYDOMAIN.COM\MyUser
我使用以下内容测试了spn:
setspn -Q HTTP/MyUser@MYDOMAIN.COM
获得了成功的结果:
Checking domain DC=mydomain,DC=com CN=MyUser,OU=MyOrg,DC=mydomain,DC=com
HTTP/MyUser
HTTP/MyUser@MYDOMAIN.COM
找到现有的SPN!
现在我想测试是否可以通过运行以下命令获取MyUser的票证:
kinit MyUser@MYDOMAIN.COM
我得到了一个成功的结果("新票据存储在缓存文件中......")
现在我想用我的keytab测试它:
kinit MyUser@MYDOMAIN.COM -k -t http-web.keytab
得到以下例外:
Exception: krb_error 0 Do not have keys of types listed in default_tkt_enctypes available; only have keys of following type: No error KrbException: Do not have keys of types listed in default_tkt_enctypes available; only have keys of following type:
我使用klist工具查看我的keytab是否包含任何键:
klist -e -K -k -t http-web.keytab
得到以下结果:
KVNO: 8
Key type: 23
Key: 0x47bf8039a8506cd67c524a03ff84ba4e
Time stamp: Jan 01, 1970 02:00
作为最后一次绝望的尝试,我检查了MyUser的以下帐户选项:
我不确定设置这些选项是否会导致它,但现在我运行
kinit MyUser@MYDOMAIN.COM
我收到以下错误:
Exception: krb_error 14 KDC has no support for encryption type (14) KDC has no support for encryption type
KrbException: KDC has no support for encryption type (14)
所以我在这里绝望,我不知道自己在做什么。这都是试错的问题(主要是错误)。 如果有人能指导我通过这里,我将不胜感激。
谢谢, 利奥尔
答案 0 :(得分:0)
原来是一个愚蠢的错误。 我在Spring注入了用户帐户而不是主要名称作为servicePrincipal。