我正在尝试使用SPNEGO和Tomcat实现基于浏览器的单点登录。
我已按照这两页的所有说明进行操作:
当我从Firefox或Chrome访问hello_spnego.jsp时,我被要求输入用户名和密码,然后它完美地显示了我的用户名;像魅力一样工作。但是,当我尝试使用IE访问它时,我收到此错误:
HTTP Status 500 - GSSException: Failure unspecified at GSS-API level (Mechanism level: Checksum failed)
type Exception report
message GSSException: Failure unspecified at GSS-API level (Mechanism level: Checksum failed)
在尝试寻找解决方案时,我遇到了这个页面:http://www.oracle.com/technetwork/articles/idm/weblogic-sso-kerberos-1619890.html
我按照页面后半部分的客户端配置说明进行操作。之后,所有三个浏览器(Chrome,Firefox和IE)都显示同样的错误,但他们都不再要求输入用户名和密码。
我已验证用于与KDC通信的帐户是否正常运行。另外,我有web.xml文件中指定的用户名和密码,所以我没有单独的KeyTab文件。
出于诊断目的,以下是我的krb5.conf和login.conf文件的内容:
的krb5.conf
[libdefaults]
default_realm = DEVID.LOCAL
default_tkt_enctypes = aes256-cts aes256-cts-hmac-sha1-96 aes128-cts-hmac-sha1-96 aes128-cts rc4-hmac des3-cbc-sha1 des-cbc-md5 des-cbc-crc arcfour-hmac arcfour-hmac-md5
default_tgs_enctypes = aes256-cts aes256-cts-hmac-sha1-96 aes128-cts-hmac-sha1-96 aes128-cts rc4-hmac des3-cbc-sha1 des-cbc-md5 des-cbc-crc arcfour-hmac arcfour-hmac-md5
permitted_enctypes = aes256-cts aes256-cts-hmac-sha1-96 aes128-cts-hmac-sha1-96 aes128-cts rc4-hmac des3-cbc-sha1 des-cbc-md5 des-cbc-crc arcfour-hmac arcfour-hmac-md5
[realms]
DEVID.LOCAL = {
kdc = cdi-prod.devid.local
default_domain = DEVID.LOCAL
}
[domain_realm]
.DEVID.LOCAL = DEVID.LOCAL
login.conf的
spnego-client {
com.sun.security.auth.module.Krb5LoginModule required;
};
spnego-server {
com.sun.security.auth.module.Krb5LoginModule required
storeKey=true
isInitiator=false;
};
由于我没有keytab文件,因此在login.conf文件中没有提及。
此外,由于我使用的是aes256-cts加密,因此我在jdk的jre/lib/security
文件夹中添加了必需的JCE策略文件(http://www.oracle.com/technetwork/java/javase/downloads/jce8-download-2133166.html)。
仅供参考,我使用的是Tomcat 8和JDK 1.8。
我真的很感激有关这里发生的事情的一些见解。如果您需要更多信息,请告诉我。提前谢谢!
答案 0 :(得分:1)
Kerberos SPNEGO校验和失败问题
来源click
我为我的网络应用程序进行了SPNEGO身份验证。在开发过程中,我遇到了使用keytab文件对HTTP服务进行身份验证的问题:
引起:org.ietf.jgss.GSSException:在GSS-API级别未指定失败(机制级别:校验和失败)
我找到了如何解决问题的解决方案。我在服务器和客户端上使用了RHEL 7,在FreeIPA上使用了KDC / LDAP服务器:
在Web应用服务器上打开/etc/krb5.conf并添加到[libdefaults]部分一行
[libdefaults]
default_tkt_ enctypes = arcfour-hmac-md5
这是最重要的事情。该行解决了#23; Checksum失败"问题
在Kerberos域中成功验证后,我们可以使用curl:
访问Kerberized Web应用程序curl -v -k --negotiate -u:--cacert /etc/ipa/ca.crt https://myservice.com:8090/krb
network.negotiate-auth.delegation-uris value http://,https://
network.negotiate-auth.trusted-uris value .myservice.com
答案 1 :(得分:0)
我遇到了同样的问题,并在this post中找到了答案:
...转到IE的高级设置(Internet选项>高级标签) 并禁用"启用集成Windows身份验证"复选框, 这个错误消失了,我能够看到登录用户的句柄 在IE上也是......
在尝试此操作之前,请恢复您在执行oracle文章后所做的任何更改。
答案 2 :(得分:0)
我已发布类似问题here的答案。
我的情况不是GSSAPI + HTTP,但我认为SPNEGO在幕后使用相同的机制。