【发布时间】:2014-11-06 16:24:59
【问题描述】:
我正在尝试使用带有 Tomcat 的 SPNEGO 实现基于浏览器的单点登录。
我已按照这两页上的所有说明进行操作:
当我从 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。
我非常感谢您对这里发生的事情的一些见解。如果您需要更多信息,请告诉我。提前致谢!
【问题讨论】:
-
我已经发布了一个类似问题的答案here。我的案例不是 GSSAPI+HTTP,但我想 SPNEGO 在幕后使用了相同的机制。
标签: tomcat single-sign-on spnego