【问题标题】:Can I generate my own keytab programmatically in Java?我可以在 Java 中以编程方式生成自己的密钥表吗?
【发布时间】:2014-04-24 13:08:48
【问题描述】:

我想知道是否有一种方法可以在 java 中生成我自己的 keytab 而无需进入 kdc?我在 ApacheDS 测试中发现了类似的代码:

    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;

我可以在我创建的 keytab 上列出 klist:

Vno 类型主要日期别名

0 des-cbc-md5 ssh/localhost@EXAMPLE.COM 2007-02-17

另外,如果这不可能,有没有办法使用 ApacheDS 或任何其他 java 库以编程方式获取密钥表?

【问题讨论】:

    标签: java kerberos apacheds


    【解决方案1】:

    对于主体的 KDC 中的每个 enctype 存储,您必须在 keytab 中有 3 个东西。

    1. 主体名称

    2. 键值

    3. 密钥版本号

    如果您知道主体的密码,则可以重新创建前两个,但最后一个要求您联系 KDC。您还需要使用密码来创建 KDC 中的所有编码类型。你想做的事情理论上是可以的,但在实践中却很难实现。如果您在 keytab 中使用 knvo = 0,这意味着“针对任何版本号尝试此密钥”,这可能会解决大多数问题。

    仅使用主体和密码可能实现的是“引导” 过程。如果你能得到一个至少有一个工作密钥的密钥表,你应该 能够使用该密钥表来“更新”所有密钥表的新版本 使用 ktutil 等系统实用程序从 KDC 获取密钥。

    附带说明:如果可能的话,des-cbc-md5 不应用作加密类型,如今它可以通过非常适中的硬件资源被蛮力破解。

    不幸的是,下载 keytab 的 kadmin 协议因 kerberos 版本而异,我不知道它们是否有 java API。

    【讨论】:

      【解决方案2】:

      Java 有一个 KeyTab 类,您可以使用它来读取 Keytab 和 keytab 条目: http://docs.oracle.com/javase/7/docs/api/javax/security/auth/kerberos/KeyTab.html

      如果你想创建 keytab,有一个用于创建 Keytab 的命令行工具。它不需要连接到 KDC(例如:http://docs.oracle.com/javase/7/docs/technotes/tools/windows/ktab.html

      【讨论】:

        【解决方案3】:

        我知道这个问题是特定于 Java 的,但这里是 Python 中的示例,因为它只是调用 ktutil 工具来创建 keytab,所以它也应该很容易被其他语言采用:

        https://github.com/Tagar/stuff/blob/master/keytab.py

        希望这会有所帮助。

        【讨论】:

        • 该脚本只是/usr/bin/ktutil 的包装器。
        • @kevinarpe 是的,正如我所写“因为它只是调用 ktutil 工具来创建密钥表”
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2011-02-10
        • 2018-08-20
        • 1970-01-01
        • 1970-01-01
        • 2018-10-05
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多