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

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

Я хочу реализовать Single Sign On с Kerberos в Java и успешно удалось создать билет для Сервиса, используя билет из входа Windows. К сожалению, я могу создать этот билет только в том случае, если включен ключ реестра "allowtgtsessionkey". Я получаю исключение с сообщением "Идентификатор не соответствует ожидаемому значению (906)", как только я его отключу. Ключ реестра задокументирован на http://java.sun.com/j2se/1.5.0/docs/guide/security/jgss/tutorials/Troubleshooting.html и http://support.microsoft.com/kb/308339.

К сожалению, у меня нет доступа к реестру на компьютерах, где будет использоваться мое приложение, поэтому я ищу способ сделать это без необходимости его изменения. Когда я выполняю Single Sign On через SPNEGO в Internet Explorer или Mozilla Firefox, они создают билет на обслуживание в кеше кэш-памяти, поэтому определенно должен быть способ сделать это без установки раздела реестра. Кто-нибудь есть идея, как это сделать на Java?

Спасибо за вашу помощь, Memminger

Обновление: я отказываюсь от этой проблемы. Раздел реестра Windows предотвращает доступ к Билету (точнее: предмет) внутри кеша Ticket. Java в Windows использует свою собственную реализацию GSSAPI, и я полагаю, что для создания Service Ticket необходим доступ к Билету. API SSPI Windows API имеет полный доступ к кешу Ticket и, таким образом, может создавать сервисные билеты. Этот API используется веб-браузерами, но он не используется Java (согласно http://java.sun.com/developer/technicalArticles/J2SE/security/#3). Когда я отключу SSPI в Firefox после доступа к веб-странице один раз (так что билет службы был создан), я все равно могу получить доступ к этой странице, поэтому, возможно, использование командной строки будет достаточно, чтобы создать билет на обслуживание с использованием API SPPI.

Для нас это означает, что мы можем либо отказаться от Single Sign On (что неприемлемо для нас), либо что мы делаем аутентификацию на стороне клиента нашего приложения (потому что мы можем только читать имя пользователя, но не проверять билет на сервере), что является серьезной угрозой безопасности. Еще один пример того, как более сильные ограничения безопасности приводят к увеличению дыр в безопасности, поскольку они становятся слишком сложными в использовании.

4b9b3361

Ответ 1

Простите меня, если я неправильно понимаю вашу проблему, но...

Точка систем типа SSO заключается в том, что клиент аутентифицируется непосредственно на (отдельный) сервер аутентификации и получает от него билет. Затем он передает билет на целевой сервер (ы), который он хочет использовать, каждый из которых проверяет, что билет действителен на сервере аутентификации. Если билет подтвержден, сервер может предположить, что клиент только получил его, представив (доверенный) сервер Kerberos с приемлемыми учетными данными.

Нигде в процессе, если какой-либо сервер аутентифицируется от имени клиента. В такой системе единственным сервером, который должен знать и проверять учетные данные клиента, является сервер аутентификации - ни один другой сервер не должен иметь доступ к этой информации. Таким образом, клиент может аутентифицироваться для многих серверов только с одним обменом аутентификацией, а учетные данные не подвергаются риску за счет хранения или доступа к нескольким серверам.

Похоже, ваша реализация работает так же, как и должна - проверка подлинности должна выполняться на стороне клиента приложения, и это правильно, а не риск для безопасности.

Ответ 2

Вы пытались установить sun.security.jgss.native в Java 6? Разве SSPI не был бы "родным" интерфейсом для окон?