Tomcat 9.0.64下Kerberos从RC4迁移至AES256遇问题求助
我正尝试将Java应用的Kerberos加密从RC4迁移到AES256,环境为Tomcat 9.0.64、Java 1.8.0_322-b06,此前RC4加密可正常工作,但迁移后出现401错误,弹出Windows认证框,Kerberos调试日志仅显示添加密钥后直接进入logout流程,无明确报错信息。
已执行的操作
- 使用ktutil生成新keytab,命令:
addent -password -p HTTP/my.host@MY.DOMAIN -k 1 -e aes256-cts-hmac-sha1-96 - 修改AD用户属性
msds-supportedEncryptionType为24(0x18),并配置SPN为HTTP/my.host@MY.DOMAIN - 更新krb5.conf配置,指定加密类型优先级:
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 - 启用Kerberos调试日志:
-Dsun.security.krb5.debug=true -Dsun.security.jgss.debug=true -Dsun.security.spnego.debug=true
排查建议
验证keytab有效性
用klist -e -k <keytab文件>检查keytab中是否包含AES256类型的密钥条目,同时确认kvno(密钥版本号)与AD中该SPN对应的密钥版本一致。若AD中密钥已更新,keytab的kvno不匹配会直接导致认证失败。确认JCE无限制权限策略
Java 8u161及以后版本默认包含无限制权限策略,但部分版本仍需手动确认。检查JRE目录lib/security下的local_policy.jar和US_export_policy.jar是否为无限制版本,若不是需替换为对应版本的无限制策略文件。检查AD用户加密配置
除了msds-supportedEncryptionType,需确认AD用户账户的高级属性中是否勾选“使用Kerberos AES 256位加密”,同时确保域控制器支持AES256加密,且域功能级别至少为Windows Server 2008。验证SPN绑定正确性
使用setspn -L <AD用户名>检查HTTP/my.host@MY.DOMAIN是否唯一绑定到目标AD账户,避免重复SPN引发的认证冲突。深挖Kerberos日志细节
重点排查日志中TGT请求、TGS响应环节的隐性提示,比如客户端发送的加密类型列表是否包含AES256,或服务器返回的票据是否使用了不支持的加密类型。检查Tomcat配置一致性
确认Tomcat的server.xml中JAAS配置或SPNEGO Valve参数是否指定了正确的keytab路径、principal名称,且无残留的RC4相关配置项。
内容的提问来源于stack exchange,提问作者Trackres

