密钥表中Java9
问题描述:
在JDK8一个可以使keytab文件像这样:密钥表中Java9
static File a(String spn, String password) throws Exception {
final File f = File.createTempFile("tmp_", ".ktab");
final sun.security.krb5.internal.ktab.KeyTab ktab = sun.security.krb5.internal.ktab.KeyTab.create(f.getAbsolutePath());
final sun.security.krb5.PrincipalName p = new sun.security.krb5.PrincipalName(spn, sun.security.krb5.PrincipalName.KRB_NT_SRV_HST);
ktab.addEntry(p, password.toCharArray(), 1, true);
ktab.save();
return f;
}
在JDK9这将产生
error: package sun.security.krb5 is not visible
有
javax.security.auth.kerberos.KeyTab
但it显得缺乏ktab和密码功能。
在Java9中制作keytab文件的最佳方法是什么?
使用来自JDK8的1.5M sun.security.jar工作,但它并不理想。
使用ProcessBuilder的ktab更好,但仍然很难看,并且ktab不包含在JRE/JDK(8或9)中。
答
您使用的API在JRE内部。您可以使用Apache Kerby项目中的替代Kerberos实现。以KeytabAddCommand为例。
+1
它看起来像9隐藏了一些功能,外部库是唯一的选择。而且我认为9应该减少代码重复,也许他们会完全删除它或使它在10年内正式可用。 – user1133275
这就是为什么人们不应该使用sun。*类。它们是JVM的内部组件,因为广告可随时消失。 –
@RomainHippeau是的,我明白这就是为什么我问什么是最好的选择。 – user1133275
你正在尝试做你自己的ktab.exe工具吗?只是想知道为什么你不使用ProcessBuilder/Process来执行它。在任何情况下,JDK 9的变化都是JDK内部类在编译时不可访问。您将在JDK 9文档和发行说明中阅读关于此的更多信息。 –