Apache Bad Request «La taille d'un champ d'en-tête de demande dépasse la limite du serveur» avec Kerberos SSO

9

Je configure un SSO pour les utilisateurs d'Active Directory via un site Web qui s'exécute sur Apache (Apache2 sur SLES 11.1), et lors des tests avec Firefox, tout fonctionne correctement. Mais lorsque j'essaie d'ouvrir le site Web dans Internet Explorer 8 (Windows 7), tout ce que je reçois est

"Mauvaise Demande

Votre navigateur a envoyé une demande que ce serveur ne pouvait pas comprendre.

La taille d'un champ d'en-tête de demande dépasse la limite du serveur.

Autorisation: Négocier [chaîne ultra longue] "

Mon vhost.cfg ressemble à ceci:

<VirtualHost hostname:443>
  LimitRequestFieldSize 32760
  LimitRequestLine 32760
  LogLevel debug

  <Directory "/data/pwtool/sec-data/adbauth">
    AuthName "Please login with your AD-credentials (Windows Account)"
    AuthType Kerberos
    KrbMethodNegotiate on
    KrbAuthRealms REALM.TLD
    KrbServiceName HTTP/hostname
    Krb5Keytab /data/pwtool/conf/http_hostname.krb5.keytab
    KrbMethodK5Passwd on
    KrbLocalUserMapping on
    Order allow,deny
    Allow from all
  </Directory>

  <Directory "/data/pwtool/sec-data/adbauth">
    Require valid-user
  </Directory>

    SSLEngine on
    SSLCipherSuite ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP:+eNULL
    SSLCertificateFile /etc/apache2/ssl.crt/hostname-server.crt
    SSLCertificateKeyFile /etc/apache2/ssl.key/hostname-server.key
</VirtualHost>

Je me suis également assuré que les cookies sont supprimés et j'ai essayé plusieurs valeurs plus petites pour LimitRequestFieldSize et LimitRequestLine.

Une autre chose qui me semble bizarre, c'est que même avec le débogage LogLevel, je n'aurai aucun journal à ce sujet. La dernière ligne du journal est

ssl_engine_kernel.c(1879): OpenSSL: Write: SSL negotiation finished successfully

Quelqu'un a-t-il une idée à ce sujet?

Aurelin
la source
Avez-vous pu trouver une solution à ce problème? J'ai exactement les mêmes symptômes.
Gani Simsek
Hey Gani, je ne suis pas sûr. J'ai écrit ma solution "pas sûr si ça marche" ici serverfault.com/a/426599/111458 . Veuillez excuser ma réponse tardive. Si vous avez toujours besoin de la solution, essayez ma réponse et faites-moi / nous savoir si cela a fonctionné =)
Aurelin

Réponses:

7

Mon instinct dit que vous avez un très gros jeton de sécurité, peut-être parce que l'utilisateur est membre d'un grand nombre de groupes. L'implémentation AD Kerberos va fournir à Apache un certificat d'attribut de privilège (PAC) par défaut. Cette structure peut être importante si l'utilisateur est membre d'un nombre important de groupes. Vous pouvez utiliser l' tokensz.exeoutil pour voir la taille du jeton de l'utilisateur.

Si tel est le problème, vous pouvez modifier l'attribut UserAccountControl du compte de l'utilisateur pour empêcher l'envoi du PAC.

Vous pourrez peut-être vous en sortir en modifiant votre /etc/krb5.conffichier pour référencer le KDC en tant que kdc = tcp/kdc.name.here. Ce problème peut se produire si le PAC fait que le jeton est trop volumineux pour un datagramme UDP, mais forcer la communication vers le KDC avec TCP est également une solution de contournement possible.

La modification de cette valeur sur 1 000 utilisateurs n'est pas difficile pour vos administrateurs AD si elle résout votre problème.

Evan Anderson
la source
(Euh putain, j'ai accidentellement supprimé le commentaire. Je dors toujours, semble-t-il) Eh bien, je peux leur demander s'ils changeraient cela, mais j'en doute en raison de l'organisation. structure. Et ce n'est pas que mon projet soit super important, alors .. J'essaierai d'abord la modification de /etc/krb5.conf .. Merci. Btw, une idée pourquoi ce problème se produit uniquement dans IE, mais pas dans Opera ni Firefox?
Aurelin
J'ai essayé de modifier /etc/krb5.conf, mais cela ne le résout pas du tout. Une autre chose que je viens de comprendre est que votre lien ne décrit qu'une solution pour les serveurs Win2k3, mais nous exécutons Win2k8 RC2. J'ai oublié de le mentionner, désolé.
Aurelin
Eh bien .. je dois dire que c'était un peu bizarre
Aurelin
2

J'ai eu cette erreur sur un site Drupal 7 dans Safari sur Mac et j'ai constaté que la fermeture des fenêtres du navigateur et l'effacement du cache du navigateur, la fermeture du navigateur, son ouverture et le rechargement de la page fonctionnaient pour mettre fin à l'erreur qui ne s'est produite que cette fois.

Mauvaise demande Votre navigateur a envoyé une demande que ce serveur ne pouvait pas comprendre. > La taille d'un champ d'en-tête de demande dépasse la limite du serveur. Cookie / n

Dean Flory
la source
2
Cela ressemble à une solution "Microsoft" pour moi: redémarrez et j'espère que le problème disparaîtra.
Colin 't Hart du
1
@Colin, peu importe combien cela peut sembler une réponse « Microsoft », plusieurs fois qui est exactement ce qui est nécessaire. Lors de l'effacement du cache d'un navigateur, de nombreux navigateurs ne parviennent pas à vider le cache en mémoire, d'où la nécessité de redémarrer le navigateur. Cela s'applique certainement aux versions Mac de Firefox, Chrome et Camino. Je n'utilise jamais Safari, je ne peux donc pas commenter celui-ci.
John Gardeniers du
1

J'ai trouvé une autre solution, mais je ne sais pas si cela fonctionne vraiment. Apache Docs indique que pour les gros packages, je devrai définir LimitRequestFieldSize et / ou LimitRequestLine.

Le fait est que si vous souhaitez définir la valeur de LimitRequestLine sur quelque chose de supérieur à 8 Ko, vous devrez modifier la source et recompiler Apache, car 8 Ko est la maxSize fixe ( http://httpd.apache.org/docs/ 2.2 / mod / core.html # limitrequestline ).

Je ne sais pas avec certitude si cette méthode fonctionne, car j'ai réinstallé apache à partir de notre propre référentiel sur un deuxième serveur plus tard. Il semble que ce soit une version de package différente car le problème ne s'y est pas produit.

Aurelin
la source