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

spring-security-kerberos can't read keytab?

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

1
2
3
4
5
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服务器上:

1
2
3
4
5
<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>

但找不到主体:

1
2
3
4
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.keytabfile:c:/http-web.keytabl
  • 错误指定的主体名称(即
    与生成密钥表文件的实际值不匹配)
  • keytab文件路径中的空格(请注意是否曾经
    已修复),-在关于SPRING SECURITY KERBEROS / SPNEGO EXTENSION SpringSource博客条目的评论中看到了抱怨,并且收到了关于我的开发环境的证据-Windows 7 / Java 6,-必须始终考虑绝对路径(即使classpath引用了keytab)没有空格)

  • 我遇到了完全相同的问题。

    问题是您的" keyTabLocation"设置。
    您不能将其设置为/WEB-INF/http-web.keytab

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

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

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