首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Java 17更新-找不到合适类型的密钥来解密AP RC4

Java 17更新-找不到合适类型的密钥来解密AP RC4
EN

Stack Overflow用户
提问于 2022-05-02 11:11:40
回答 1查看 694关注 0票数 0

我有一个使用Kerberos进行SSO的高效Java应用程序。

在将Java从版本16更新到17之后,我会遇到以下错误:

无法找到合适类型的密钥来用HMAC解密AP-REQ - RC4。

代码语言:javascript
复制
Caused by: GSSException: Failure unspecified at GSS-API level (Mechanism level: Invalid argument (400) - Cannot find key of appropriate type to decrypt AP-REQ - RC4 with HMAC)
    at java.security.jgss/sun.security.jgss.krb5.Krb5Context.acceptSecContext(Unknown Source)
    at java.security.jgss/sun.security.jgss.GSSContextImpl.acceptSecContext(Unknown Source)
    at java.security.jgss/sun.security.jgss.GSSContextImpl.acceptSecContext(Unknown Source)
    at java.security.jgss/sun.security.jgss.spnego.SpNegoContext.GSS_acceptSecContext(Unknown Source)
    at java.security.jgss/sun.security.jgss.spnego.SpNegoContext.acceptSecContext(Unknown Source)
    at java.security.jgss/sun.security.jgss.GSSContextImpl.acceptSecContext(Unknown Source)
    at java.security.jgss/sun.security.jgss.GSSContextImpl.acceptSecContext(Unknown Source)
    at org.keycloak.federation.kerberos.impl.SPNEGOAuthenticator.establishContext(SPNEGOAuthenticator.java:169)
    at org.keycloak.federation.kerberos.impl.SPNEGOAuthenticator$AcceptSecContext.run(SPNEGOAuthenticator.java:132)
    at org.keycloak.federation.kerberos.impl.SPNEGOAuthenticator$AcceptSecContext.run(SPNEGOAuthenticator.java:122)
    ... 73 more
Caused by: KrbException: Invalid argument (400) - Cannot find key of appropriate type to decrypt AP-REQ - RC4 with HMAC
    at java.security.jgss/sun.security.krb5.KrbApReq.authenticate(Unknown Source)
    at java.security.jgss/sun.security.krb5.KrbApReq.<init>(Unknown Source)
    at java.security.jgss/sun.security.jgss.krb5.InitSecContextToken.<init>(Unknown Source)
    ... 83 more

ktpass /crypto ALL用于创建keytab文件。

EN

回答 1

Stack Overflow用户

发布于 2022-05-02 13:08:49

错误导致

经过一番研究,我发现了下面的JDK 17安全增强

  • 在Kerberos中反对3 3DES和RC4 默认情况下,3 3DES和RC4 Kerberos加密类型已被禁用。3 3DES和RC4都是不应该使用的弱加密算法。Kerberos 3 3DES和RC4加密类型在RFC 8429中被正式否决。 默认情况下,des3-hmac-sha1和rc4-hmac加密类型现在是禁用的,但是可以通过在krb5.conf配置文件中将allow_weak_crypto属性设置为true来重新启用,这是您自己的风险。但是,请注意,这也将重新启用其他已禁用的弱加密类型,如des和DE-CBC-MD5。或者,将default_tkt_enctypes、default_tgs_enctypes和permitted_enctypes属性设置为允许的加密类型。 发行:JDK-8139348

解决方案1-使用AES 128/256加密:

首选的解决方案是将AD/Kerberos配置为使用AES 128或256位加密。

大多数情况下,以下内容似乎就足够了,但是AD或GPO中也可能有阻止AES加密的其他配置:

为kerberos配置的服务用户(用于创建keytab文件)需要以下配置:

之后,在运行java应用程序的机器上运行:

代码语言:javascript
复制
klist purge

解决方案2-解决->允许弱加密

对于我的快速解决方案(也许您不是AD的管理员或需要等待维护窗口),下面的工作对我来说是有效的:

创建或使用现有的krb5.conf文件,添加:

代码语言:javascript
复制
[libdefaults]
allow_weak_crypto=true

使用以下方法启动java应用程序:

-Djava.security.krb5.conf=%CONF_LOCATION%/krb5.conf

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72085851

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档