java - 检查 Java 中的 Kerberos KeyTab 文件是否有效

标签 java kerberos gssapi keytab

我正在开发一个 Java 代码库,用于检查 Kerberos KeyTab 文件是否有效,但它使用内部类 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 的内容() 方法或非内部类中的等效方法。

是否有不依赖黑客的选项,例如反射(reflect)私有(private)方法或访问内部 API?

最佳答案

1)

您可以尝试使用 native 可执行文件来验证 key 表文件,并根据输出继续确定有效性,通过 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)

您还可以推出自己的 validator 。我认为source没那么复杂。

关于java - 检查 Java 中的 Kerberos KeyTab 文件是否有效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49524405/

相关文章:

java - 在封闭范围内定义的局部变量日志必须是最终的或实际上是最终的

java - 如何将数组列表的内容写入文本文件?

azure - Azure AD OAuth 2 token 端点是否可以采用 kerberos token 作为身份验证代码?

java - 未使用Java将Java GSS-API服务票证保存在凭证缓存中

java - Java 中的可过期 Kerberos 票证

java - 回收站查看错误

java - java中子字符串和字符串的区别

ldap - openLDAP 的单点登录

security - Windows8上的Kerberos

c - 我如何使用 GSS API 更新 kerberos 服务票据