带有Tomcat错误的SPNEGO:GSSException:GSS-API级别未指定故障(机制级别:校验和失败)



我正尝试在Tomcat中使用SPNEGO实现基于浏览器的单点登录。

我已经遵循了这两页上的所有说明:

  • http://spnego.sourceforge.net/pre_flight.html
  • http://spnego.sourceforge.net/spnego_tomcat.html

当我从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加密,我添加了必要的JCE策略文件(http://www.oracle.com/technetwork/java/javase/downloads/jce8-download-2133166.html)在jdk的CCD_ 1文件夹中。

仅供参考,我使用的是Tomcat 8和JDK 1.8。

我真的很想了解一下这里发生的事情。如果你需要更多信息,请告诉我。提前感谢!

Kerberos SPNEGO校验和失败问题

源点击

我为我的网络应用程序进行了SPNEGO身份验证。在开发过程中,我遇到了一个使用HTTP服务的keytab文件对用户进行身份验证的问题:

导致原因:org.ietf.jgss.GSSE异常:GSS-API级别未指定故障(机制级别:校验和失败)

我找到了解决问题的办法。我在服务器和客户端上使用了RHEL 7,并将FreeIPA用作KDC/LDAP服务器:

  1. 在web应用服务器上打开/etc/krb5.conf,并在[libdefaults]部分添加一行

    [libdefaults]

    默认_tkt_​enctypes=arcfour-hmac-md5

这是最重要的事情。这一行解决了"校验和失败"问题

  1. 在客户端上:kinit用户名的密码username@MYSERVICE.COM:

在Kerberos域中成功验证后,我们可以使用curl:访问Kerberized web应用程序

curl-v-k--协商-u:--cacert/etc/ipa/ca.crthttps://myservice.com:8090/krb

  1. 在FireFox中,在地址栏中打印about:config->我保证->然后找到

network.negotiate-auth.delegation-uris​值http://,https://

network.negotiate-auth.trusted-uris value.myservice.com​

我也遇到了同样的问题,在这篇文章中找到了答案:

转到IE的高级设置("Internet选项">"高级"选项卡)并禁用"启用集成Windows身份验证"复选框,这个错误消失了,我可以看到登录用户的句柄在IE上。。。

在尝试之前,请还原您在遵循oracle文章之后所做的任何更改。

最新更新