Keycloak + Kerberos 身份验证:机制级别:无效参数 (400) - 无法找到适当类型的密钥来解密 AP REP - 使用 HMAC 的 RC4

2024-01-09

我有以下内容

  1. JBoss EAP 7.2.2 上的 Spring Web 应用程序 - Machine CentOs
  2. CentO 上的 Keycloak 3.3.4
  3. 活动目录

我们在 OpenJDK 8 上运行

用户使用其 Active Directory 帐户从 Windows 计算机登录。

Keycloak 配置有 kerberos 使用联合。在 CentOs 机器上,使用以下命令安装 kerberos 客户端

yum install krb5-user krb5-doc
yum install krb5-pkinit krb5-workstation
yum install krb5-libs krb5-devel
yum install krb5-server krb5-workstation pam_krb5

在keycloak用户联合中,keytab文件路径和其他配置都是正确的。 keycloak 日志文件证实了这一点。 领域:XYZ.COM 服务器主体 HTTP/主体名称@REALM

Keytab 文件是使用生成的

ktpass.exe /out file.keytab /mapuser user-name@REALM /mapop set /princ HTTP/principal-name@REALM /ptype KRB5_NT_PRINCIPAL /pass XXXXXX /crypto RC4-HMAC-NT

在 krb5.conf 中输入以下内容

default_tgs_enctypes = arcfour-hmac
default_tkt_enctypes = arcfour-hmac
permitted_enctypes = arcfour-hmac

问题是登录时出现异常

Looking for keys for: HTTP/principal-name@REALM
2020-02-24 09:34:06,327 WARN  [org.keycloak.federation.kerberos.impl.SPNEGOAuthenticator] (default task-13) SPNEGO login failed: java.security.PrivilegedActionException: GSSException: Failure unspecified at GSS-API level (Mechanism level: Invalid argument (400) - Cannot find key of appropriate type to decrypt AP REP - RC4 with HMAC)
at java.security.AccessController.doPrivileged(Native Method)
at javax.security.auth.Subject.doAs(Subject.java:422)
at org.keycloak.federation.kerberos.impl.SPNEGOAuthenticator.authenticate(SPNEGOAuthenticator.java:68)
at org.keycloak.storage.ldap.LDAPStorageProvider.authenticate(LDAPStorageProvider.java:677)
at org.keycloak.credential.UserCredentialStoreManager.authenticate(UserCredentialStoreManager.java:296)
at org.keycloak.authentication.authenticators.browser.SpnegoAuthenticator.authenticate(SpnegoAuthenticator.java:89)
at org.keycloak.authentication.DefaultAuthenticationFlow.processFlow(DefaultAuthenticationFlow.java:200)
at org.keycloak.authentication.AuthenticationProcessor.authenticateOnly(AuthenticationProcessor.java:853)
at org.keycloak.authentication.AuthenticationProcessor.authenticate(AuthenticationProcessor.java:722)
at org.keycloak.protocol.AuthorizationEndpointBase.handleBrowserAuthenticationRequest(AuthorizationEndpointBase.java:145)

at ...
Caused by: GSSException: Failure unspecified at GSS-API level (Mechanism level: Invalid argument (400) - Cannot find key of appropriate type to decrypt AP REP - RC4 with HMAC)
at sun.security.jgss.krb5.Krb5Context.acceptSecContext(Krb5Context.java:856)
at sun.security.jgss.GSSContextImpl.acceptSecContext(GSSContextImpl.java:342)
at sun.security.jgss.GSSContextImpl.acceptSecContext(GSSContextImpl.java:285)
at sun.security.jgss.spnego.SpNegoContext.GSS_acceptSecContext(SpNegoContext.java:906)
at sun.security.jgss.spnego.SpNegoContext.acceptSecContext(SpNegoContext.java:556)
at sun.security.jgss.GSSContextImpl.acceptSecContext(GSSContextImpl.java:342)
at sun.security.jgss.GSSContextImpl.acceptSecContext(GSSContextImpl.java:285)
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)
... 72 more
Caused by: KrbException: Invalid argument (400) - Cannot find key of appropriate type to decrypt AP REP - RC4 with HMAC
at sun.security.krb5.KrbApReq.authenticate(KrbApReq.java:278)
at sun.security.krb5.KrbApReq.<init>(KrbApReq.java:149)
at sun.security.jgss.krb5.InitSecContextToken.<init>(InitSecContextToken.java:108)
at sun.security.jgss.krb5.Krb5Context.acceptSecContext(Krb5Context.java:829)
... 81 more

2020-02-24 09:34:06,328 INFO  [stdout] (default task-13)        [Krb5LoginModule]: Entering logout
2020-02-24 09:34:06,328 INFO  [stdout] (default task-13)        [Krb5LoginModule]: logged out Subject

我已经做了很多研究,不幸的是排除了所有可能的原因。进行了以下测试: klist -k {密钥表文件的路径} -e

Result4 HTTP/主体名称@REALM arcfour-hmac 在 Active Directory 中,msDS-KeyVersionNumber = 4

kinit HTTP/主体名称@REALM klist-e

Result:... Etype(skey、TKT)arcfour-hmac、aes256-cts-hmac-sha1-96

总之,Keycloak 能够读取密钥表,但无法查找解密密钥。

有人可以帮忙吗?

我已经看过这个帖子了Kerberos - 无法找到适当类型的密钥来使用 HMAC 解密 AP REP - RC4 https://stackoverflow.com/questions/31877027/kerberos-cannot-find-key-of-appropriate-type-to-decrypt-ap-rep-rc4-with-hmac

以及以下链接:https://bugs.openjdk.java.net/browse/JDK-8193855 https://bugs.openjdk.java.net/browse/JDK-8193855

和许多其他帖子,但没有成功。


您正在使用以下配置:/crypto RC4-HMAC-NT

我有同样的错误,因为 keytab 文件是用错误生成的/crypto配置。

GSS-API 级别未指定故障(机制级别:无效参数 (400)
无法找到适当类型的密钥来使用 HMAC 解密 AP-REQ - RC4)

您可以尝试使用生成新的密钥表文件/crypto ALLktpass命令。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Keycloak + Kerberos 身份验证:机制级别:无效参数 (400) - 无法找到适当类型的密钥来解密 AP REP - 使用 HMAC 的 RC4 的相关文章

随机推荐

  • 最长最大重复子串

    子串的长度可以是 1 2 3 我试图解决的问题涉及找到出现次数最多的子字符串 所以它基本上分解为寻找具有最大频率的字符 然而 我发现我可以使用后缀树在 O n 中找到最长的重复子串 但是 后缀树返回子字符串 并优先考虑长度 我想找到出现次数
  • 如何在文件顶部添加新的文本行?

    我正在开发一个简单的程序 使Python脚本可执行 并且我正在添加解释器路径的部分 usr bin python 我尝试这样做 但它没有添加新行 而是替换了当前的行and删除下一行的一部分 我做错了什么 我将源代码上传到Ubuntu Pas
  • Swift - 压缩视频文件

    所以 目前我正在使用它来压缩视频 func compressVideo inputURL NSURL outputURL NSURL handler session AVAssetExportSession gt Void let urlA
  • 使用 min/max 时的任何差异都发生在序列而不是元素级别

    我的意思是是否存在以下情况
  • 如何从另一个项目导入.java并在android中导入包

    我们正在大学里开展一个项目 项目 A 该项目必须从多年前制定的另一个项目 项目 B 的课程中扩展出来 这是在 Eclipse 下工作 并为 android 开发应用程序 所以这实际上是我们正在讨论的活动 到目前为止我已经尝试过这个 将项目
  • 嵌套 CSS 样式?

    这样的事情可能吗 imgbox hover ui resizable se some style 或者概念上的等价物 基本上 只有当某个类的元素悬停在上面时 才会出现某个元素within该类应该改变一些风格 你可以这样做 imgbox ho
  • 我们应该在 Rails Factory 中使用 Faker 吗?

    I love Faker https github com stympy faker 我在我的seeds rb一直用真实的数据填充我的开发环境 我也刚刚开始使用工厂女工 https github com thoughtbot factory
  • 在 Android 中使用 color 和 color.darker?

    好的 我的应用程序中有一个整数变量 它是颜色的值 由颜色选择器根据我的喜好设置 现在 我需要使用该颜色和任何颜色的深色版本 现在我知道在标准 Java 中有一个 Color darker 方法 但在 Android 中似乎没有等效的方法 有
  • Linq 中的 SQL LIKE

    在添加这个问题之前 我确实在 stackoverflow 上搜索过类似的问题 但我找不到 互联网上的大多数问题都使用 LIKE 和字符串 例如 LIKE ABC 但我需要与不同表的现有列进行比较 我需要为 select 语句编写一个 lin
  • spring boot org.springframework.beans.factory.BeanCreationException:无法自动装配字段:

    我从 spring boot 开始 遇到一些配置问题 我无法自动装配某些服务 我收到 BeanCreationException 我的应用程序类 SpringBootApplication EnableAutoConfiguration C
  • 活动没有选项菜单

    我试图模拟点击菜单项存在于Toolbar using 机器人电动 使用以下代码 ShadowActivity shadowActivity Shadows shadowOf activity shadowActivity clickMenu
  • 如何查看导致 LINQ to SQL 中的 SubmitChanges 错误的 sql?

    我有一些 LINQ to SQL 有时会抛出 无法在具有唯一索引的对象 dbo Table 中插入重复的键行 IX Indexname 该语句已终止 有什么方法可以打开日志记录或至少调试数据上下文以查看引发错误时正在执行的 sql 吗 Up
  • 如何从文档中删除所有肖像图片

    我正在对文档图像进行 OCR 处理 我想检测所有图片并从文档图像中删除 我想保留文档图像中的表格 一旦我检测到图片 我就会将其删除 然后进行 OCR 我试图找到轮廓试图检测所有更大的区域 不幸的是它也检测到表格 还如何删除在文档图像中保留其
  • 通过 Python 代码使用 SignalR 服务器

    将 Python 与 SignalR 集成有哪些选项 Python 代码是大型第三方产品的一部分 与语言偏好无关 SignalR 服务器提供对现有 NET 产品的订阅 我们希望通过 Python 重用 NET SignalR 服务器 pyt
  • Java中如何随机选择图片?

    我正在制作一个将使用以下代码的程序 JLabel MyImage new JLabel new ImageIcon image1 png 但是 我想让随机图片出现 比如 image2 image3 image4 我该如何做到这一点 不使用L
  • @RequestMapping 在 Spring Boot 内部如何工作?

    RestController RequestMapping employee public class Employee RequestMapping save public void saveEmployee saving employe
  • blockIdx 与区块执行顺序相关吗?

    之间有什么关系吗blockIdx以及线程块在 GPU 设备上执行的顺序 我的动机是 我有一个内核 其中多个块将从全局内存中的同一位置读取 如果这些块能够同时运行 那就太好了 因为 L2 缓存命中很好 在决定如何将这些块组织成网格时 可以肯定
  • 如何识别无法嵌入文件的 YouTube 视频

    我有一个移动应用程序 可以在网络视图中嵌入一些 YouTube 视频 问题是 使用 YouTube Data API v3 我得到了 可嵌入 要显示的项目 但其中一些说 视频不可用 当我将相同的代码粘贴到 jsfiddle 或域或某种网络服
  • docker jboss7 战争提交。服务器启动失败且无法恢复

    有没有办法将 war 文件部署到在 docker 容器内运行的 Jboss as7 中 因为我的 jboss 服务器在 docker 提交后似乎失败了 Could not rename usr local share jboss stand
  • Keycloak + Kerberos 身份验证:机制级别:无效参数 (400) - 无法找到适当类型的密钥来解密 AP REP - 使用 HMAC 的 RC4

    我有以下内容 JBoss EAP 7 2 2 上的 Spring Web 应用程序 Machine CentOs CentO 上的 Keycloak 3 3 4 活动目录 我们在 OpenJDK 8 上运行 用户使用其 Active Dir