我想知道是否有一种方法可以在java中生成我自己的keytab而无需转到kdc?我在ApachDS测试中发现了类似的代码:
Keytab keytab = Keytab.getInstance();
KerberosTime timeStamp = new KerberosTime(KerberosUtils.UTC_DATE_FORMAT.parse("20070217235745Z"));
Map<EncryptionType, EncryptionKey> keys = KerberosKeyFactory
.getKerberosKeys(principalName, userPassword);
KeytabEntry keytabEntry = new KeytabEntry(
principalName,
1L,
timeStamp,
(byte) 0,
keys.get(EncryptionType.DES_CBC_MD5));
List<KeytabEntry> entry = Arrays.asList(keytabEntry);
keytab.setEntries(entry);
keytab.write(keytabFile);
return keytabFile;
我能够在我创建的密钥表上创建一个klist:
Vno类型主要日期别名
0 des-cbc-md5 ssh/localhost@EXAMPLE.COM 2007-02-17
此外,如果这不可能,有没有办法以编程方式使用ApacheDS或任何其他Java库获取密钥表?
答案 0 :(得分:1)
对于主体,KDC中的每个enctype商店的keytab中必须包含3个内容。
主要名称
关键值
密钥版本号
如果你知道校长的密码,你可以重新创建前两个,但是最后一个要求你联系KDC。您还需要使用密码来创建KDC中的所有enctype。你想要做的事情在理论上是可行的,但在实践中它很难实现。如果在密钥表中使用knvo = 0,则表示&#34;针对任何版本号尝试此密钥&#34;这可能会让你解决大部分问题。
使用委托人和密码可以实现的目标是&#34; bootstrap&#34; 这个过程。如果您可以获得至少包含一个工作密钥的密钥表,则应该 能够使用该密钥表来更新&#34; keytab与新版本的所有 来自KDC的密钥使用系统实用程序,如ktutil。
作为旁注:如果可能的话,des-cbc-md5不应该被用作enctype,这些天它可以用非常适中的硬件资源进行暴力破解。
不幸的是,下载keytabs的kadmin协议在kerberos版本之间有所不同,我不知道他们中的任何一个是否有java API。
答案 1 :(得分:0)
Java有一个KeyTab类,您可以使用它来读取Keytabs和keytab条目: http://docs.oracle.com/javase/7/docs/api/javax/security/auth/kerberos/KeyTab.html
如果要创建keytab,可以使用命令行工具创建Keytabs。它不需要连接到KDC(对于exapm:http://docs.oracle.com/javase/7/docs/technotes/tools/windows/ktab.html。
答案 2 :(得分:0)
我知道这个问题是特定于Java的,但这是Python中的示例,因为它只是调用ktutil工具来创建keytab,所以它也很容易被采用到其他语言中:
https://github.com/Tagar/stuff/blob/master/keytab.py
希望这有帮助。