密钥表中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)中。

+0

这就是为什么人们不应该使用sun。*类。它们是JVM的内部组件,因为广告可随时消失。 –

+0

@RomainHippeau是的,我明白这就是为什么我问什么是最好的选择。 – user1133275

+0

你正在尝试做你自己的ktab.exe工具吗?只是想知道为什么你不使用ProcessBuilder/Process来执行它。在任何情况下,JDK 9的变化都是JDK内部类在编译时不可访问。您将在JDK 9文档和发行说明中阅读关于此的更多信息。 –

您使用的API在JRE内部。您可以使用Apache Kerby项目中的替代Kerberos实现。以KeytabAddCommand为例。

+1

它看起来像9隐藏了一些功能,外部库是唯一的选择。而且我认为9应该减少代码重复,也许他们会完全删除它或使它在10年内正式可用。 – user1133275