2017-08-31 25 views
0

在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文檔和發行說明中閱讀關於此的更多信息。 –

回答

0

您使用的API在JRE內部。您可以使用Apache Kerby項目中的替代Kerberos實現。以KeytabAddCommand爲例。

+1

它看起來像9隱藏了一些功能,外部庫是唯一的選擇。而且我認爲9應該減少代碼重複,也許他們會完全刪除它或使它在10年內正式可用。 – user1133275