Spring 使用HMAC解密AP REP-RC4 位于sun.security.krb5.KrbApReq.authenticate(KrbApReq.java:273) 位于sun.security.krb5.KrbApReq.(KrbApReq.java:144) 位于sun.security.jgss.krb5.InitSecContextToken。(InitSecContextToken.java:108) 位于sun.security.jgss.krb5.Krb5Context.acceptSecContext(Krb5Context.java:761) ... 40多

Spring 使用HMAC解密AP REP-RC4 位于sun.security.krb5.KrbApReq.authenticate(KrbApReq.java:273) 位于sun.security.krb5.KrbApReq.(KrbApReq.java:144) 位于sun.security.jgss.krb5.InitSecContextToken。(InitSecContextToken.java:108) 位于sun.security.jgss.krb5.Krb5Context.acceptSecContext(Krb5Context.java:761) ... 40多,spring,tomcat,spring-security,kerberos,spnego,Spring,Tomcat,Spring Security,Kerberos,Spnego,我发现了问题。 Spring security kerbos要求密钥表文件的路径为“资源字符串”(详细信息:)。 当我将路径设置为“file:/home/xxxxx/conf/krb5/krb5.keytab”时,应用程序会运行,但我认为它以后无法打开文件,Kerberos无法加载任何密钥。不幸的是,来自Kerberos的日志并不那么清晰 当我将路径设置为“/home/xxxxx/conf/krb5/krb5.keytab”时,我得到了以下异常 Caused by: java.io.FileNo

我发现了问题。 Spring security kerbos要求密钥表文件的路径为“资源字符串”(详细信息:)。 当我将路径设置为“file:/home/xxxxx/conf/krb5/krb5.keytab”时,应用程序会运行,但我认为它以后无法打开文件,Kerberos无法加载任何密钥。不幸的是,来自Kerberos的日志并不那么清晰

当我将路径设置为“/home/xxxxx/conf/krb5/krb5.keytab”时,我得到了以下异常

Caused by: java.io.FileNotFoundException: ServletContext resource [/home/xxxxx/conf/krb5/krb5.keytab] cannot be resolved to URL because it does not exist
此问题的解决方案可以是SunJaasKerberosTicketValidator.java文件中的修复程序:

private String keyTabLocation;

LoginConfig loginConfig = new LoginConfig(keyTabLocation, servicePrincipal, debug);
而不是:

private Resource keyTabLocation;

LoginConfig loginConfig = new LoginConfig(keyTabLocation.getURL().toExternalForm(), servicePrincipal, debug);
有了这个补丁,一切都正常了。我们可以设置文件路径,格式为“/home/xxxxx/conf/krb5/krb5.keytab”


如果有人知道关于它的更多细节,请写在这里。

至少Java 7无法(或者,我的版本无法)处理“文件:”前缀:。我必须对Spring源代码进行与您相同的修改。谢谢,这很有帮助。在尝试不同的配置上浪费了半个星期。

Hmm,对我来说似乎是个bug。尝试在处填写票证。这看起来像是kerberos配置问题。检查您的keytab文件是否包含正确类型的密钥(23表示rc4 hmac)。这似乎不是问题的答案。你应该把它作为对另一个答案的评论发布。你如何能够创建LoginConfig类的实例,因为它是SunJaasKerberosTicketValidator的私有内部类?此外,我也面临类似的问题(“校验和失败”),并将我的查询发布在此链接()请检查并找到任何建议?将SunJaasKerberosTicketValidator复制到您的项目并更改代码
private String keyTabLocation;

LoginConfig loginConfig = new LoginConfig(keyTabLocation, servicePrincipal, debug);
private Resource keyTabLocation;

LoginConfig loginConfig = new LoginConfig(keyTabLocation.getURL().toExternalForm(), servicePrincipal, debug);