使用 "java.security.krb5.conf" System.property() 更新 kerberors krb.conf 文件无效
Updating the kerberors krb.conf file using "java.security.krb5.conf" System.property() is not working
我想指向一个不同的krb.conf文件,dynamically, without restarting the JVM
。我在 Whosebug 上搜索了不同的解决方案,并尝试相应地实施该解决方案。但是有些方法,即使 如果我更新 System.property("java.security.krb5.conf", ...) 指向 the new krb.conf file
,JAAS 无法理解这一点,并且仍在使用早期的 conf 文件。以下是我的代码解决方案的详细信息:
我的Jaas.conf文件如下:
Mutual {
com.sun.security.auth.module.Krb5LoginModule required client=TRUE;
};
sp.kerb.sso.KinitExample {
com.sun.security.auth.module.Krb5LoginModule required
client=TRUE
refreshKrb5Config=true
debug=true;
};
出于显而易见的原因,我设置了 refreshKrb5Config=true
,因为我想重新加载 krb 配置文件。
这是我要执行的代码:
包裹 sp.kerb.sso;
import sun.security.krb5.internal.tools.Kinit;
public class KinitExample {
public static void main(String[] args) {
String kerberosFileName = "C:\Windows\krb5.ini";
String jaas_config_file_name = "C:\Users\User1\temp\howrah.jaas.conf";
System.setProperty("java.security.auth.login.config", jaas_config_file_name); // setting the jaas config file
System.setProperty("java.security.krb5.conf" , kerberosFileName); // setting the kerberos file
System.setProperty("java.security.krb5.debug" , "true");
final String administrator = "admin@exampledomain.lab".toUpperCase();
String cacheFileLoc = "C:\Users\User1\temp\admin.cache";
// Perfoming Kinit ...
Kinit.main(new String[]{"-c",cacheFileLoc, administrator , "Password123" });
kerberosFileName = "C:\Users\User2\temp\new.krb.conf"; // Using new KRB configuration file
System.setProperty("java.security.krb5.debug" , "true");
System.setProperty("java.security.auth.login.config", jaas_config_file_name); // setting the property again
System.setProperty("java.security.krb5.conf" , kerberosFileName); // setting the property again
System.out.println(System.getProperty("java.security.krb5.conf")); // Prints the updated conf file location.
cacheFileLoc = "C:\Users\User2\temp\newadmin.cache";
String newAdmin = "administrator@test.lab".toUpperCase();
Kinit.main(new String[]{"-c",cacheFileLoc, newAdmin , "Password123" });
}
}
admin
的缓存已 创建,但 newAdmin
的缓存未 创建由于各自的 krb.conf 文件具有不同的领域,并且 JAAS 似乎无法从 new.krb.conf 连接到该领域,因此因臭名昭著而失败906 错误代码。
我做错了什么?我想要实现的是可能的吗?我该如何解决这个问题?
另请注意,如果我完全注释管理缓存创建逻辑并从新的开始。krb.conf(与 newAdmin 相关的所有代码)它工作得很好并为 newAdmin 创建缓存
您应该调用 sun.security.krb5.Config.refresh();
以便从新文件重新加载配置。
我想指向一个不同的krb.conf文件,dynamically, without restarting the JVM
。我在 Whosebug 上搜索了不同的解决方案,并尝试相应地实施该解决方案。但是有些方法,即使 如果我更新 System.property("java.security.krb5.conf", ...) 指向 the new krb.conf file
,JAAS 无法理解这一点,并且仍在使用早期的 conf 文件。以下是我的代码解决方案的详细信息:
我的Jaas.conf文件如下:
Mutual {
com.sun.security.auth.module.Krb5LoginModule required client=TRUE;
};
sp.kerb.sso.KinitExample {
com.sun.security.auth.module.Krb5LoginModule required
client=TRUE
refreshKrb5Config=true
debug=true;
};
出于显而易见的原因,我设置了 refreshKrb5Config=true
,因为我想重新加载 krb 配置文件。
这是我要执行的代码: 包裹 sp.kerb.sso;
import sun.security.krb5.internal.tools.Kinit;
public class KinitExample {
public static void main(String[] args) {
String kerberosFileName = "C:\Windows\krb5.ini";
String jaas_config_file_name = "C:\Users\User1\temp\howrah.jaas.conf";
System.setProperty("java.security.auth.login.config", jaas_config_file_name); // setting the jaas config file
System.setProperty("java.security.krb5.conf" , kerberosFileName); // setting the kerberos file
System.setProperty("java.security.krb5.debug" , "true");
final String administrator = "admin@exampledomain.lab".toUpperCase();
String cacheFileLoc = "C:\Users\User1\temp\admin.cache";
// Perfoming Kinit ...
Kinit.main(new String[]{"-c",cacheFileLoc, administrator , "Password123" });
kerberosFileName = "C:\Users\User2\temp\new.krb.conf"; // Using new KRB configuration file
System.setProperty("java.security.krb5.debug" , "true");
System.setProperty("java.security.auth.login.config", jaas_config_file_name); // setting the property again
System.setProperty("java.security.krb5.conf" , kerberosFileName); // setting the property again
System.out.println(System.getProperty("java.security.krb5.conf")); // Prints the updated conf file location.
cacheFileLoc = "C:\Users\User2\temp\newadmin.cache";
String newAdmin = "administrator@test.lab".toUpperCase();
Kinit.main(new String[]{"-c",cacheFileLoc, newAdmin , "Password123" });
}
}
admin
的缓存已 创建,但 newAdmin
的缓存未 创建由于各自的 krb.conf 文件具有不同的领域,并且 JAAS 似乎无法从 new.krb.conf 连接到该领域,因此因臭名昭著而失败906 错误代码。
我做错了什么?我想要实现的是可能的吗?我该如何解决这个问题?
另请注意,如果我完全注释管理缓存创建逻辑并从新的开始。krb.conf(与 newAdmin 相关的所有代码)它工作得很好并为 newAdmin 创建缓存
您应该调用 sun.security.krb5.Config.refresh();
以便从新文件重新加载配置。