SPNEGO与Tomcat错误:GSSException:在GSS-API级别未指定失败(机制级别:校验和失败)

时间:2014-11-06 16:24:59

标签: tomcat single-sign-on spnego

我正在尝试使用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。

我真的很感激有关这里发生的事情的一些见解。如果您需要更多信息,请告诉我。提前谢谢!

3 个答案:

答案 0 :(得分:1)

Kerberos SPNEGO校验和失败问题

来源click

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

引起:org.ietf.jgss.GSSException:在GSS-API级别未指定失败(机制级别:校验和失败)

我找到了如何解决问题的解决方案。我在服务器和客户端上使用了RHEL 7,在FreeIPA上使用了KDC / LDAP服务器:

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

    [libdefaults]

    default_tkt_ enctypes = arcfour-hmac-md5

  2. 这是最重要的事情。该行解决了#23; Checksum失败"问题

    1. 在客户端: kinit用户名 username@MYSERVICE.COM的密码:
    2. 在Kerberos域中成功验证后,我们可以使用curl:

      访问Kerberized Web应用程序

      curl -v -k --negotiate -u:--cacert /etc/ipa/ca.crt https://myservice.com:8090/krb

      1. 在FireFox中,在地址栏中打印about:config - >我保证 - >然后找
      2. 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在幕后使用相同的机制。