我正在设置一个客户端并使用 java 客户端连接到多个启用 Kerberos 的系统。
使用 UserGroupInformation
。如果我使用其他领域,Java 客户端总是选择 default_realm
并抛出错误。
是否可以使用不同的 key 表和不同的主体进行连接,但使用相同的 krb5.conf
?/etc/krb5.conf
:
[libdefaults]
default_realm = NEW.COM
dns_lookup_realm = false
dns_lookup_kdc = false
ticket_lifetime = 1d
renew_lifetime = 7d
forwardable = true
[realms]
NEW.COM = {
kdc = bharath.kdc
admin_server = bharath.kdc
}
EXAMPLE.COM = {
kdc = wckdserver.krbnet
admin_server = wckdserver.krbnet
}
最佳答案
您可以通过以下形式的 jaas 配置文件控制使用哪个 key 表:
client {
com.sun.security.auth.module.Krb5LoginModule required
refreshKrb5Config=true
useKeyTab=true
keyTab="<path to keytab>"
principal="<user>@<realm>";
};
此配置文件使用系统属性设置:
-Djava.security.auth.login.config=<path to jaas config>
如果要在 VM 的单次运行期间更改设置,则需要使用以下命令清除 VM 中缓存的用户配置:
Configuration.setConfiguration(null);
要使用不同的领域,您需要指定以下属性的 和 :
-Djava.security.krb5.realm=<realm>
-Djava.security.krb5.kdc=<kdc>