Подтвердить что ты не робот

Как люди делают работу клиента Java SPNEGO в Windows?

Чтобы выполнить аутентификацию HTTP SPNEGO на стороне клиента с помощью Java на Windows, вам необходимо установить ключ реестра Windows allowtgtsessionkey. Это хорошо документировано. Я не понимаю, как люди обходят это? Большинство корпоративных сайтов никогда не согласится изменить этот раздел реестра в Windows ради единственного программного обеспечения. Также подумайте о проблемах, если это необходимо изменить на каждой рабочей станции в организации. Но это просто теория, потому что я до сих пор не смог убедить кого-либо из наших клиентов изменить этот раздел реестра.

Я не виню их. Большинство корпоративных администраторов увидели бы это, ослабляя безопасность, и поэтому возражают против этого.

Я читал это: Есть ли способ в Java или использовать командную строку для получения билета Kerberos для службы с использованием собственного SSPI API?

но теперь он довольно старый.

Итак, я действительно не понимаю, как люди могут заставить Windows + Java-клиент + Kerberos работать ни на чем, кроме университетских сред, домашних пользователей и т.п.

Вопрос, который я получаю от корпоративных администраторов, - "зачем нам устанавливать этот раздел реестра, когда такие приложения, как IE и Firefox, не имеют проблем с выполнением SPNEGO без установки этого ключа?". Ну, я знаю, какой ответ. Это связано с тем, что приложения, такие как IE и Firefox, основаны на собственном GSS-интерфейсе Windows (SSPI), в то время как Sun Java использует свою собственную реализацию.

Я предполагаю, что использование чего-то типа WAFFLE разрешит проблему, но я бы предпочел чистым решением Java. Я также предполагаю, что это не поможет использовать решения на базе Java, такие как Spring security или Apache HttpClient, поскольку все они будут страдать от этой проблемы.

Приветствуется любая помощь или указатели.

Update1

Я обнаружил, что для этого в базе данных ошибок Oracle есть RFE. Там также патч, переданный по этому вопросу сотрудником Oracle и обсуждения в списке рассылки JDK об этой функции. Не делает меня намного более мудрой, чем, насколько я понимаю, это не доступно в текущей Java 7, даже не экспериментально. Правильно?

UPDATE2

Вопрос теперь живой снова в списке рассылки OpenJDK Security Dev.

4b9b3361

Ответ 1

Спасибо за ссылку на мой поток в списке рассылки security-dev;-) Моя среднесрочная цель - сделать этот патч доступным для Java 6+ через одобренный путь класса. Вам может быть интересен этот билет WAFFLE, который я создал недавно: https://github.com/dblock/waffle/issues/50

Я тоже оценил WAFFLE, но это не так, как Java-GSS, нужно создать дубликат кода, этого я обязательно хочу избежать.

Вся эта проблема не является ошибкой Oracle. Microsoft просто блокирует любой вызов сеансового билета через функцию LSA CallPackage. Предлог - это безопасность. Мне бы очень хотелось узнать, как SSPI может создать билет на обслуживание, когда я не могу разумно получить доступ к TGT. Поэтому такое закрытое исходное решение всасывает.

В настоящий момент у вас есть только три варианта:

  • Получить TGT снова через Java означает
  • Попробуйте WAFFLE
  • Введите собственный код

Я потрогал дрянной раздел реестра, потому что он не работает для локального администратора с учетными записями домена в любом случае. В моем случае, Tomcat dev на Windows я прибегал к вызову Java kinit тем временем.

Ответ 2

Теперь есть действительно хорошее решение для этого, входящего в HTTP-клиент Apache, используя JNA для получения билета из собственного SSPI API. См. Ответ:

fooobar.com/info/185396/...