问题描述
|
我正在尝试按照本教程的spring-security-kerberos进行操作
我有一个带有一个主体的密钥表:
ktutil: rkt http-web.keytab
ktutil: l
slot KVNO Principal
---- ---- ---------------------------------------------------------------------
1 3 HTTP/[email protected]
此密钥表是使用以下命令在win 2k8域控制器上生成的:
ktpass /out http-web.keytab /mapuser [email protected] /princ HTTP/[email protected] /pass *
它复制在spnego.xml中使用的测试Web服务器上:
<bean class=\"org.springframework.security.extensions.kerberos.SunJaasKerberosTicketValidator\">
<property name=\"servicePrincipal\" value=\"HTTP/[email protected]\" />
<property name=\"keyTabLocation\" value=\"/WEB-INF/http-web.keytab\" />
<property name=\"debug\" value=\"true\" />
</bean>
但找不到主体:
Key for the principal HTTP/[email protected] not available in
jndi:/localhost/spring-security-kerberos-sample-1.0.0.CI-SNAPSHOT/WEB-INF/http-web.keytab
[Krb5LoginModule] authentication Failed
Unable to obtain password from user
我尝试将Web服务器(Centos 5.5,tomcat6)加入AD WAD.ENG.HYTRUST.COM,可以使用AD凭据登录,然后使用来自/etc/krb5.keytab的主体来查看是否可以读取。 ..相同的回应。我还在名称的大写和小写形式上尝试了很多变体。
ps今天早上从git中检查了一下。
解决方法
有几个错误导致“无法从用户获取密码”:
密钥表文件的位置指定错误(就像@jasop
指出);它应该像
classpath:http-web.keytab
或file:c:/http-web.keytabl
错误指定的主体名称(即
与生成密钥表文件的实际值不匹配)
keytab文件路径中的空格(请注意是否曾经
固定),-在关于SPRING SECURITY KERBEROS / SPNEGO EXTENSION SpringSource博客条目的评论中看到了抱怨,并收到了关于我的开发环境的证据-Windows 7 / Java 6,-必须始终考虑绝对路径(即使classpath引用了keytab)没有空格)
,我有完全相同的问题。
问题是您的\“ keyTabLocation \”设置。
您不能将其设置为/WEB-INF/http-web.keytab
您需要将其设置为文件路径或类路径中的某个内容。
例如,我将文件放在类路径上并进行以下设置:
<property name=\"keyTabLocation\" value=\"classpath:http-web.keytab\" />