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