SPNEGO: сервер получает усеченный токен, а не один клиент - PullRequest
0 голосов
/ 03 июля 2018

Я пытаюсь взаимодействовать с кластером 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

1 Ответ

0 голосов
/ 06 июля 2018

После получения дампа TCP и просмотра запроса, отправляемого клиентом, я обнаружил, что базовая клиентская библиотека HTTP усекает маркер Kerberos в кодировке base64 до 76 символов в строке, а затем добавляет символы CRLF. Больше информации в этом ответе. Исправлена ​​ошибка в более новой версии commons-codec, которая использовалась библиотекой Apache HttpClient.

...