如何使用 Java GSS-API 和 Kerberos 5 从单个 Java 客户端程序与两个不同的 KDC 服务器通信?

How to communicate with two different KDC servers from single Java client program using Java GSS-API and Kerberos 5?

我正在使用 Java GSS-API 和 Kerberos 进行安全身份验证。我实现了示例服务器和示例客户端程序,客户端能够成功验证并从服务器获取服务。对于这些示例程序,我通过 Java 系统 属性 (java.security.krb5.kdc) 传递了 KDC 地址。现在的问题是我想从单个客户端程序连接到两个不同的 KDC 服务器以访问多个服务。通过系统属性我们可以只传递一个KDC Server地址。如何从单个客户端程序连接到多个 KDC 服务器?

您可以使用 KRB5 配置文件指定多个域条目和相应的 KDC。

[libdefaults]
default_realm = A1.LOCAL
default_tkt_enctypes = aes128-cts rc4-hmac des3-cbc-sha1 des-cbc-md5 des-cbc-crc
default_tgs_enctypes = aes128-cts rc4-hmac des3-cbc-sha1 des-cbc-md5 des-cbc-crc
permitted_enctypes = aes128-cts rc4-hmac des3-cbc-sha1 des-cbc-md5 des-cbc-crc

[realms]
A1.LOCAL  = {
   kdc = ADA1.A1.LOCAL
}

B1.LOCAL = {
   kdc = ADB1.B1.LOCAL
}

[domain_realm] 
a1.local=A1.LOCAL
    .a1.local=A1.LOCAL
b1.local=B1.LOCAL
.b1.local=B1.LOCAL

不要单独设置每个 属性,而是将此文件作为配置提供给您的程序。这可以使用 - System.setProperty("java.security.krb5.conf", krb5ConfigFilePath);

来完成