3

我正在尝试按照本教程学习 spring-security-kerberos 我有一个密钥表,其中有一个主体:

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 中的主体来查看它是否可以读取。 ..同样的反应。我还尝试了很多大写和小写名称的变体。

ps 今天早上从 git 中检查出来。

4

2 回答 2

5

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

  1. 错误地指定了 keytab 文件的位置(就像@jasop 指出的那样);它应该类似于 classpath:http-web.keytabfile:c:/http-web.keytabl
  2. 错误指定的主体名称(即与实际名称不匹配的主体名称,为其生成了 keytab 文件)
  3. keytab 文件路径中的空格(请注意是否已修复),- 在SPRING SECURITY KERBEROS/SPNEGO EXTENSION SpringSource 博客条目的评论中看到投诉,并在我的开发环境 - Windows 7 / Java 6 上收到了证据,-必须始终考虑绝对路径(即使类路径引用的 keytab 没有空格)
于 2012-09-04T16:36:43.527 回答
0

我有完全相同的问题。

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

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

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

    <property name="keyTabLocation" value="classpath:http-web.keytab" />
于 2012-03-06T06:40:51.967 回答