spring-security-kerberos无法读取密钥表?

Art*_*ldt 3 kerberos spring-security spnego

我正在尝试按照spring-security-kerberos的本教程进行操作, 我有一个带有一个主体的密钥表:

ktutil:  rkt http-web.keytab
ktutil:  l
slot KVNO Principal
---- ---- ---------------------------------------------------------------------
   1    3 HTTP/aulfeldt.hta.nightly@WAD.ENG.HYTRUST.COM
Run Code Online (Sandbox Code Playgroud)

此密钥表是使用以下命令在win 2k8域控制器上生成的:

ktpass /out http-web.keytab /mapuser aulfeldt-hta-nightly@WAD.ENG.HYTRUST.COM /princ HTTP/aulfeldt.hta.nightly@WAD.ENG.HYTRUST.COM /pass *

它复制在spnego.xml中使用的测试Web服务器上:

<bean class="org.springframework.security.extensions.kerberos.SunJaasKerberosTicketValidator">
  <property name="servicePrincipal" value="HTTP/aulfeldt.hta.nightly@WAD.ENG.HYTRUST.COM" />
  <property name="keyTabLocation" value="/WEB-INF/http-web.keytab" />
  <property name="debug" value="true" />
</bean>
Run Code Online (Sandbox Code Playgroud)

但找不到主体:

Key for the principal HTTP/aulfeldt.hta.nightly@WAD.ENG.HYTRUST.COM 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
Run Code Online (Sandbox Code Playgroud)

我尝试将Web服务器(Centos 5.5,tomcat6)加入AD WAD.ENG.HYTRUST.COM,可以使用AD凭据登录,然后使用来自/etc/krb5.keytab的主体来查看是否可以读取。 ..同样的反应。我还在名称的大写和小写形式上尝试了很多变体。

ps今天早上从git中检查了一下。

Art*_*cis 5

导致“无法从用户获取密码”的错误有几个:

  1. keytab文件的指定位置错误(就像@jasop指出的一样);它应该像 classpath:http-web.keytabfile:c:/http-web.keytabl
  2. 错误指定的主体名称(即,与生成密钥表文件的实际名称不匹配的主体名称)
  3. keytab文件路径中的空格(请注意是否已解决),-在SPRING SECURITY KERBEROS / SPNEGO EXTENSION SpringSource博客条目的注释中看到了投诉,并收到了关于我的开发环境的证据-Windows 7 / Java 6,-必须始终考虑绝对路径(即使classpath引用的keytab不带空格)