Я пытаюсь взаимодействовать с кластером SolrCloud с включенным Kerberos. Я настроил свой клиентский процесс Java с файлами jaas.conf
и krb5.conf
, используя параметры
-Djava.security.auth.login.config=<path to jaas.conf>
-Djavax.security.auth.useSubjectCredsOnly=false
-Djava.security.krb5.conf=<path to krb5.conf>
Я получаю запрещенную ошибку в клиентских логах. Журналы сервера показывают следующую ошибку:
Исключение аутентификации: GSSException: обнаружен дефектный токен
(Уровень механизма: неверный токен SPNEGO NegTokenInit: предоставлены дополнительные данные
в конструктор DerValue)
При включении ведения журнала отладки в клиентском и серверном процессе я вижу, что сервер получает токен меньшего размера, чем тот, который отправляет клиент.
Пример:
Found KeyTab solr.keytab for HTTP/<hostname>@REALM
Found KeyTab solr.keytab for HTTP/<hostname>@REALM
Entered SpNegoContext.acceptSecContext with state=STATE_NEW
SpNegoContext.acceptSecContext: receiving token = a0 82 04 b9 30 82 04 b5 a0 0d 30 0b 06 09 2a 86 48 86 f7 12 01 02 02 a1 04 03 02 01 f6 a2 82 04 9c 04 82 04 98 60 82 04 94 06 09 2a 86
Found KeyTab solr.keytab for HTTP/<hostname>@REALM
Found KeyTab solr.keytab for HTTP/<hostname>@REALM
Entered SpNegoContext.acceptSecContext with state=STATE_NEW
SpNegoContext.acceptSecContext: receiving token = a0 82 04 b9 30 82 04 b5 a0 0d 30 0b 06 09 2a 86 48 86 f7 12 01 02 02 a1 04 03 02 01 f6 a2 82 04 9c 04 82 04 98 60 82 04 94 06 09 2a 86
Клиент отправляет намного более длинный токен. Я проверял это в журналах отладки клиента, в которых токен отправки был намного длиннее, а также просматривал заголовок HTTP-запроса.
Глядя на исходный код, я вижу, что ошибка вызвана следующими строками:
https://github.com/frohoff/jdk8u-jdk/blob/master/src/share/classes/sun/security/util/DerValue.java#L383
https://github.com/frohoff/jdk8u-jdk/blob/master/src/share/classes/sun/security/jgss/spnego/NegTokenInit.java#L143
https://github.com/frohoff/jdk8u-jdk/blob/master/src/share/classes/sun/security/jgss/spnego/SpNegoContext.java#L512
Те же узлы SOLR, которые я пытаюсь подключить программно, доступны через браузер, и журналы сервера показывают, что они получают полный токен.
Я использую Java 1.8.0_111, а также пробовал Java 1.8.0_11