Проверьте, является ли файл Kerberos KeyTab действительным в Java

Я работаю над базой кода 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() метод или эквивалент во внешнем классе.

Существуют ли варианты, которые не основаны на хакерских атаках, таких как рефлексия частных методов или доступ к внутренним API?

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)

Вы также можете развернуть свой собственный валидатор. Я думаю, что источник не так уж сложен.

Другие вопросы по тегам