2009-11-23 3 views
2

Je construisais un Active Directory authentification unique système d'authentification pour les applications Web Java (en utilisant SPNEGO/Kerberos), et tout fonctionne bien avec soit Firefox ou (aurait) Safari, mais Internet Explorer provoque une exception:Pourquoi une exception GSSException est-elle générée lors de l'utilisation d'Active Directory SSO de Microsoft IE sur un serveur Java?

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

En fait, je pensais que IE fonctionnait avant l'installation d'un correctif Windows.

Répondre

5

Apparemment, le patch KB974455 de Microsoft IE a activé la «protection étendue» pour l'authentification Windows intégrée. Normalement, avec l'authentification SPNEGO/Kerberos, la machine client acquiert un ticket Kerberos/Active Directory pour le serveur et présente ce ticket pendant la négociation d'authentification HTTP. À partir d'au moins Java 1.6, la bibliothèque Java JGSS-API est capable d'interpréter la négociation SPNEGO/Kerberos et d'authentifier le ticket. Avec Extended Protection (voir aussi Extended Protection for Authentication), IE ajoute une liaison de canal à la négociation SPNEGO; Les données sur lesquelles la liaison de canal est basée sont actuellement inconnues, sauf que l'identificateur de session SSL semble en faire partie. La bibliothèque Java JGSS-API tente de valider la liaison de canal et ne peut pas utiliser les données sur lesquelles la liaison est basée. Il renvoie ensuite l'exception de non-concordance de liaison de canal.

Le problème a abouti à someinternettraffic, y compris Sun Bug ID 6851973.

Selon les commentaires associés à 6.851.973, RFC 4121, dit,

Si l'appelant GSS_Accept_sec_context [RFC2743] passe GSS_C_NO_CHANNEL_BINDINGS [RFC2744] comme les liaisons de canal, l'accepteur peut ignorer toutes les liaisons de canal fournis par l'initiateur, renvoyant le succès même si l'initiateur a transmis les liaisons de canal.

et "tous les principaux implémenteurs de krb5 implémentent ce 'MAY'". JGSS semble exiger que l'accepteur fournisse la liaison de canal si l'initiateur la présente. En outre, le correctif est disponible en Java 7, construire 64 et sera backportées à Java 5 et 6, bien que le Java 6u18 ne semblent avoir comme indiqué dans 6851973.

Un travail autour vu dans Extended Protection for Authentication est de fixer la

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\LSA\SuppressExtendedProtection 
paramètre de registre

à 0x02. Cela désactive la protection étendue.

Questions connexes