【问题标题】:Check whether a Kerberos KeyTab file is valid in Java检查 Kerberos KeyTab 文件在 Java 中是否有效
【发布时间】:2018-03-28 00:43:23
【问题描述】:

我正在开发一个检查 Kerberos KeyTab 文件是否有效的 Java 代码库,但它使用内部类 sun.security.krb5.internal.ktab.KeyTab 来实现其 isValid() 方法。目前,它正在执行以下操作:

File keytabFile = new File("/path/to/keytab");
KeyTab keytab = KeyTab.getInstance(keytabFile);
boolean keytabIsValid = keytab.isValid();
if (!keytabIsValid) {
   throw new ApplicationSpecificException("Keytab is not valid");
}

在 Java 9 中访问这个方法比较麻烦,所以我正在寻找一种方法来避免使用这个内部类,但是浏览 JDK 源代码,我没有看到任何暴露 isValid() 方法的东西或非内部类中的等价物。

是否有不依赖于 hack 的选项,例如反射私有方法或访问内部 API?

【问题讨论】:

    标签: java kerberos gssapi keytab


    【解决方案1】:

    1)

    您可以尝试使用本机可执行文件来验证 keytab 文件,并根据输出确定有效性,通过 java ProcessBuilder。例如对于 linux/*nix,可以运行

    klist -k –t your.keytab
    

    2)

    既然您已经提到不希望访问内部 API,我假设您知道这些选项。但仅包括此处以获取此特定案例的信息:

    javac --add-exports java.security.jgss/sun.security.krb5.internal.ktab=ALL-UNNAMED your-class.java
    java --add-exports java.security.jgss/sun.security.krb5.internal.ktab=ALL-UNNAMED your-class
    

    3)

    您也可以推出自己的验证器。我认为source 没有那么复杂。

    【讨论】:

    • 谢谢,我已经在做选项 2(因为我必须这样做)。看起来选项 3 可能是这些选择中最不糟糕的。我希望在某个地方有一些聪明的小班可以做我需要的,但是唉。
    猜你喜欢
    • 1970-01-01
    • 2015-11-15
    • 2020-02-10
    • 1970-01-01
    • 2015-09-28
    • 2014-12-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多