You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Keycloak Kerberos认证报错:RC4 with HMAC加密类型不支持

Keycloak Kerberos认证:RC4-HMAC报错与AES配置方案

为什么会尝试使用RC4-HMAC?

  • Windows客户端默认可能优先推送RC4-HMAC的认证票据,只要AD中对应的用户/服务账户未禁用RC4加密类型,或者客户端Kerberos配置未强制优先AES,就会出现这种情况。
  • 即便你的keytab支持AES256,Keycloak底层的Java Kerberos实现会尝试匹配客户端发送的所有加密类型;如果客户端先发送RC4请求,而Keycloak默认已禁用这类弱加密,就会触发该报错。

配置Keycloak使用AES加密的步骤

1. 确保AD服务账户启用AES加密

  • 在Windows AD中找到Keycloak对应的服务账户,打开属性→账户标签,勾选使用Kerberos AES 256位加密(按需可同时勾选AES 128),保存设置。
  • 重新生成keytab,避免用/crypto all,直接指定AES加密类型:
    ktpass /princ HTTP/keycloak.example.com@EXAMPLE.COM /mapuser KEYCLOAK_SERVICE_ACCOUNT@EXAMPLE.COM /pass * /out keycloak.keytab /crypto AES256-SHA1 /ptype KRB5_NT_PRINCIPAL /mapop set
    

2. 调整Keycloak领域的Kerberos配置

  • 登录Keycloak管理控制台,进入目标领域→身份提供者→选中你的Kerberos/SPNEGO提供者:
    • 确认Kerberos Keystore Path指向新生成的AES keytab文件。
    • 在高级设置中,将Allowed Encryption Types设为aes256-cts-hmac-sha1-96,aes128-cts-hmac-sha1-96(仅保留AES类型)。
    • 核对Kerberos Principal与AD中配置的SPN完全一致(如HTTP/keycloak.example.com@EXAMPLE.COM)。

3. 配置Docker环境的Java Kerberos参数

Keycloak运行在Java环境中,需强制其使用AES并禁用RC4,通过Docker启动参数实现:

  • 添加JVM参数:
    -e JAVA_OPTS="-Djava.security.krb5.conf=/opt/keycloak/conf/krb5.conf -Dsun.security.krb5.encryption.types=aes256-cts-hmac-sha1-96,aes128-cts-hmac-sha1-96"
    
  • 准备krb5.conf文件,确保加密类型仅包含AES:
    [libdefaults]
      default_realm = EXAMPLE.COM
      dns_lookup_kdc = true
      dns_lookup_realm = true
      default_tkt_enctypes = aes256-cts-hmac-sha1-96 aes128-cts-hmac-sha1-96
      default_tgs_enctypes = aes256-cts-hmac-sha1-96 aes128-cts-hmac-sha1-96
      permitted_enctypes = aes256-cts-hmac-sha1-96 aes128-cts-hmac-sha1-96
    
  • 将该文件挂载到Docker容器内的/opt/keycloak/conf/路径下。

4. 强制Windows客户端优先使用AES

  • 通过组策略:进入计算机配置→管理模板→系统→Kerberos→加密类型配置,启用策略并仅勾选AES256_HMAC_SHA1和AES128_HMAC_SHA1,禁用所有RC4相关选项。
  • 或通过注册表:在HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System\Kerberos\Parameters下添加SupportedEncryptionTypes DWORD值,设为0xC0000000(同时支持AES256和AES128)。

验证配置

  • 重启Keycloak容器,在Windows客户端执行klist purge清除旧票据。
  • 重新尝试登录,查看Keycloak日志,确认无RC4相关报错,且认证流程使用AES加密类型。

内容的提问来源于stack exchange,提问作者Martin Fischer

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.25 05:22:44