spring-security-kerberos无法读取keytab?

时间:2011-05-26 19:39:51

标签: spring-security kerberos spnego

我正在尝试关注this tutorial for spring-security-kerberos 我有一个keytab,其中包含一个主体:

ktutil:  rkt http-web.keytab
ktutil:  l
slot KVNO Principal
---- ---- ---------------------------------------------------------------------
   1    3 HTTP/aulfeldt.hta.nightly@WAD.ENG.HYTRUST.COM

此密钥表是使用以下命令在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>

但找不到校长:

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

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

今天早上从git检查了它。

2 个答案:

答案 0 :(得分:4)

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

  1. 错误地指定了keytab文件的本地化(就像@jasop一样 指出);它应该是类似的东西 classpath:http-web.keytabfile:c:/http-web.keytabl
  2. 错误地指定了主体名称(即主体名称 与生成keytab文件的实际文件不匹配)
  3. 密钥表文件路径中的空格(请注意,如果有的话) 固定), - 在SPRING SECURITY KERBEROS/SPNEGO EXTENSION SpringSource博客条目的评论中看到投诉,并在我的开发环境中收到证据 - Windows 7 / Java 6, - 必须始终考虑绝对路径(即使keypath引用的keytab也是如此)没有空格)

答案 1 :(得分:0)

我有完全相同的问题。

问题是你的“keyTabLocation”设置。 您无法将其设置为/WEB-INF/http-web.keytab

您需要将其设置为文件路径或类路径上的内容。

例如,我将我的文件放在类路径上并进行了以下设置:

    <property name="keyTabLocation" value="classpath:http-web.keytab" />