2009-11-23 11 views
2

Я строил Active Directory Единая система аутентификации входа для веб-приложений на Java (с использованием SPNEGO/Kerberos), и все отлично работает как с Firefox или (по сообщениям) Safari, но Internet Explorer вызывает исключение:Почему я получаю исключение GSS при использовании единого входа службы Active Directory из Microsoft IE на сервер Java?

GSSException: Channel binding mismatch (Mechanism level: ChannelBinding not provided!) 

Фактически, я думал, что IE работал до того, как был установлен патч Windows.

ответ

5

По-видимому, в Microsoft IE patch KB974455 включена функция «Расширенная защита» для встроенной проверки подлинности Windows. Обычно с аутентификацией SPNEGO/Kerberos клиентская машина получает билет Kerberos/Active Directory для сервера и представляет этот билет во время согласования HTTP-аутентификации. По меньшей мере, для Java 1.6 библиотека Java JGSS-API способна интерпретировать согласование SPNEGO/Kerberos и аутентификацию билета.

С Extended Protection (см. Также Extended Protection for Authentication), IE добавляет канал, связывающий переговоры SPNEGO; какие данные привязаны к каналу, в настоящее время неизвестно мне, кроме того, что идентификатор сеанса SSL, похоже, является его частью. Библиотека Java JGSS-API пытается проверить привязку канала и canno без данных, на которых основана привязка. Затем он выдает исключение несоответствия связывания канала.

Выпуск привел к someinternettraffic, включая Sun Bug ID 6851973.

В соответствии с комментариями, связанными с 6851973, RFC 4121, говорит,

Если вызывающий абонент, чтобы GSS_Accept_sec_context [RFC2743] переходит в GSS_C_NO_CHANNEL_BINDINGS [RFC2744] в качестве привязки канала, то акцептора могут игнорировать любые привязки каналов, поставляемых инициатор, , возвращающий успех, даже если инициатор действительно прошел в привязках каналов.

и «все основные разработчики krb5 реализуют это« МОГУТ ». Кажется, что JGSS требует, чтобы акцептор обеспечивал привязку канала, если инициатор его представляет. Кроме того, исправление доступно в Java 7, построить 64 и будет обратно портирован на Java 5 и 6, хотя Java 6u18 не, как представляется, как сообщили в 6851973.

обходным как видно в Extended Protection for Authentication чтобы установить параметр реестра

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\LSA\SuppressExtendedProtection 

до 0х02. Это отключает расширенную защиту.