Spring Boot JDK 17(Java 17)+Kerberos身份验证失败

dpiehjr4  于 2023-03-18  发布在  Spring
关注(0)|答案(4)|浏览(614)

面临着JDK 17升级和支持的新Kerberos身份验证的一个非常棘手的问题。
1.问题:JDK 17 Kerberos不再支持rc 4-hmac,因为它被标记为不安全。Kerberos弃用Kerberos 3DES和RC 4 Kerberos加密类型中的3DES和RC 4现在默认情况下已被禁用。3DES和RC 4都是不应使用的弱加密算法。Kerberos 3DES和RC 4加密类型在RFC 8429中已正式弃用。
1.需要做的事情:

  • 使用新支持的加密类型生成新的keytab文件:
  • 符合标准128-cts-hmac-sha1-96或符合标准128-cts-hmac-sha 256 -128
  • 更新AD中的服务用户(Active Directory,2个复选框以支持新的加密类型。

我们无法摆脱的错误:

Caused by: sun.security.krb5.KrbException: KDC has no support for encryption type (14)
at java.security.jgss/sun.security.krb5.KrbTgsRep.<init>(KrbTgsRep.java:69)
at java.security.jgss/sun.security.krb5.KrbTgsReq.getReply(KrbTgsReq.java:224)
at java.security.jgss/sun.security.krb5.KrbTgsReq.sendAndGetCreds(KrbTgsReq.java:235)
at java.security.jgss/sun.security.krb5.internal.CredentialsUtil.serviceCredsSingle(CredentialsUtil.java:482)
at java.security.jgss/sun.security.krb5.internal.CredentialsUtil.serviceCreds(CredentialsUtil.java:34
at java.security.jgss/sun.security.krb5.internal.CredentialsUtil.serviceCreds(CredentialsUtil.java:31
at java.security.jgss/sun.security.krb5.internal.CredentialsUtil.acquireServiceCreds(CredentialsUtil.java:169)
at java.security.jgss/sun.security.krb5.Credentials.acquireServiceCreds(Credentials.java:493)
at java.security.jgss/sun.security.jgss.krb5.Krb5Context.initSecContext(Krb5Context.java:700)
... 39 common frames omitted
Caused by: sun.security.krb5.Asn1Exception: Identifier doesn't match expected value (906)
at java.security.jgss/sun.security.krb5.internal.KDCRep.init(KDCRep.java:140)
at java.security.jgss/sun.security.krb5.internal.TGSRep.init(TGSRep.java:65)
at java.security.jgss/sun.security.krb5.internal.TGSRep.<init>(TGSRep.java:60)
at java.security.jgss/sun.security.krb5.KrbTgsRep.<init>(KrbTgsRep.java:54)
... 47 common frames omitted

我们错过了什么吗?
更新管道上的All以支持新的加密类型和keytab.conf文件。
谢谢大家!

ibrsph3r

ibrsph3r1#

通过将krb5.conf文件中的“allow_weak_crypto”属性设置为“true”,可以保留现有的rc 4-hmac行为

pbgvytdp

pbgvytdp2#

我遇到了与此处描述的完全相同的问题。查看kerberos身份验证的流程并使用this microsoft article,我们发现问题出在SQL Server的主体服务帐户(我们正在联系的服务)中。此主体服务帐户没有设置属性“msDS-SupportedEncryptionTypes”,因此默认为RC 4加密类型。
我们的修复方法是为主体服务帐户启用“此帐户支持Kerberos AES 128位加密”和“此帐户支持Kerberos AES 256位加密”。在某些情况下,可能还需要重置此帐户的密码。
如Microsoft文章中所述,默认情况下,用户帐户没有为“msDS-SupportedEncryptionTypes”设置值。

yacmzcpb

yacmzcpb3#

解决方案是使用gMSA帐户进行MSSQL服务器连接。
JDK 17应用程序--〉JDK 17 aes 128-cts-hmac-sha 256 -128密钥表--〉使用用户ID调用MSSQL服务器--〉通过gMSA帐户解析。
因此,MSSQL部分首先不接受新的加密类型。

ljsrvy3e

ljsrvy3e4#

尝试更新krb5.ini文件的内容:

default_tgs_enctypes = aes256-cts aes128-cts arcfour-hmac-md5 des-cbc-md5 des-cbc-crc
default_tkt_enctypes = aes256-cts aes128-cts arcfour-hmac-md5 des-cbc-md5 des-cbc-crc

相关问题