我有一个使用Kerberos进行SSO的高效Java应用程序。
在将Java从版本16更新到17之后,我会遇到以下错误:
无法找到合适类型的密钥来用HMAC解密AP-REQ - RC4。
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 morektpass /crypto ALL用于创建keytab文件。
发布于 2022-05-02 13:08:49
错误导致
经过一番研究,我发现了下面的JDK 17安全增强
解决方案1-使用AES 128/256加密:
首选的解决方案是将AD/Kerberos配置为使用AES 128或256位加密。
大多数情况下,以下内容似乎就足够了,但是AD或GPO中也可能有阻止AES加密的其他配置:
为kerberos配置的服务用户(用于创建keytab文件)需要以下配置:

之后,在运行java应用程序的机器上运行:
klist purge解决方案2-解决->允许弱加密
对于我的快速解决方案(也许您不是AD的管理员或需要等待维护窗口),下面的工作对我来说是有效的:
创建或使用现有的krb5.conf文件,添加:
[libdefaults]
allow_weak_crypto=true使用以下方法启动java应用程序:
-Djava.security.krb5.conf=%CONF_LOCATION%/krb5.conf
https://stackoverflow.com/questions/72085851
复制相似问题