从 Java 6 升级到 Java 7 后 Kerberos 损坏

2024-04-07

我有一个使用 spring-security kerberos 扩展的工作应用程序,在 jboss 上运行,运行 java 6。

我正在将 jvm 从 java 6 升级到 java 7。当我这样做时,使用与 java 6 相同的代码库和相同的密钥表,现在在使用 java 7 时收到错误。

我一直收到: java.security.PrivilegedActionException:GSSException:GSS-API 级别未指定失败 (机制级别:无效参数 (400) - 无法找到适当类型的密钥来使用 HMAC 解密 AP REP - RC4)

我尝试使用其他论坛中描述的不同 /crypto 选项重新生成密钥表,但无济于事。

我已经调试了 java 7 代码,实际上,处理启动时读取密钥表的类从 6 更改为 7。是否我的密钥表不再被正确读入应用程序?我在使用 Java6 启动时看到的一些调试消息在 7 中不再出现,但我无法判断这是设计使然还是表明有其他东西在起作用?还有其他人在从 6 升级到 7 时遇到问题并且他们的 kerberos 集成中断吗?有什么建议吗?

通过 spnego 和 kerberos 调试日志记录启动,我的日志显示:

2012-12-10 10:29:30,886  Debug is  true storeKey true useTicketCache false useKeyTab true doNotPrompt true ticketCache is null isInitiator false KeyTab is jndi:/localhost/docfinity/WEB-INF/classes/config/common/security/http-docfinity.keytab refreshKrb5Config is false principal is HTTP/[email protected] /cdn-cgi/l/email-protection tryFirstPass is false useFirstPass is false storePass is false clearPass is false
2012-12-10 10:30:26,322  principal is HTTP/[email protected] /cdn-cgi/l/email-protection
2012-12-10 10:30:29,794  Will use keytab
2012-12-10 10:30:29,807  Ordering keys wrt default_tkt_enctypes list
2012-12-10 10:30:29,821  Config name: C:\Windows\krb5.ini
2012-12-10 10:30:29,827  Using builtin default etypes for default_tkt_enctypes
2012-12-10 10:30:29,832  default etypes for default_tkt_enctypes:
2012-12-10 10:30:29,837   17    aes128-cts-hmac-sha1-96
2012-12-10 10:30:29,839   16    des3-cbc-sha1-kd
2012-12-10 10:30:29,842   23    rc4-hmac
2012-12-10 10:30:29,846   1     des-cbc-crc
2012-12-10 10:30:29,849   3     des-cbc-md5
2012-12-10 10:30:29,851  .
2012-12-10 10:30:29,855  Commit Succeeded 

另一个问题 - 您会看到它正在尝试读取 C:\Windows\krb5.ini。我的服务器上没有这样的文件。我需要一个吗?我也没有 java 6 的,但它可以工作。

aaron


是的!我们对 SunJaasKerberosTicketValidator 进行了修补,使其看起来像这样,并且它有效:

String keyTabPath = this.keyTabLocation.getURL().toExternalForm();
String runtimeVersion = System.getProperty("java.version");
if (runtimeVersion.startsWith("1.7")) 
{
      LOG.info("Detected jdk 7. Modifying keytabpath");
      if (keyTabPath != null)
      {
        if (keyTabPath.startsWith("file:")) 
        {
            keyTabPath = keyTabPath.substring(5);
        }
      }
}
LOG.info("KeyTabPath: " + keyTabPath);
LoginConfig loginConfig = new LoginConfig(keyTabPath, this.servicePrincipal,
                this.debug);
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

从 Java 6 升级到 Java 7 后 Kerberos 损坏 的相关文章

随机推荐