【问题标题】:SPNEGO with Tomcat error: GSSException: Failure unspecified at GSS-API level (Mechanism level: Checksum failed)带有 Tomcat 错误的 SPNEGO:GSSException:在 GSS-API 级别未指定失败(机制级别:校验和失败)
【发布时间】: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


【解决方案1】:

Kerberos SPNEGO 校验和失败问题

来源click

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

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

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

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

    [libdefaults]

    default_tkt_​enctypes = arcfour-hmac-md5

这是最重要的。此行解决“校验和失败”问题

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

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

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

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

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

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

【讨论】:

    【解决方案2】:

    我遇到了同样的问题,在this post找到了答案:

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

    在尝试此操作之前还原您在阅读 oracle 文章后所做的任何更改。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-02-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-10-05
      • 1970-01-01
      相关资源
      最近更新 更多