我正在设置一个客户端并使用 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>

10-06 09:52