Проверьте, является ли файл 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)
Вы также можете развернуть свой собственный валидатор. Я думаю, что источник не так уж сложен.