Apache Bad Request "La dimensione di un campo di intestazione della richiesta supera il limite del server" con SSO Kerberos


9

Sto configurando un SSO per gli utenti di Active Directory attraverso un sito Web che gira su un Apache (Apache2 su SLES 11.1), e quando si esegue il test con Firefox funziona tutto bene. Ma quando provo ad aprire il sito Web in Internet Explorer 8 (Windows 7), tutto ciò che ottengo è

"Brutta richiesta

Il tuo browser ha inviato una richiesta che questo server non è in grado di comprendere.

La dimensione di un campo di intestazione della richiesta supera il limite del server.

Autorizzazione: negoziare [stringa ultra lunga] "

Il mio vhost.cfg è simile al seguente:

<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>

Mi sono anche assicurato che i cookie fossero eliminati e ho provato diversi valori più piccoli per LimitRequestFieldSize e LimitRequestLine.

Un'altra cosa che mi sembra strana è che anche con il debug LogLevel non avrò alcun registro al riguardo. L'ultima riga del registro è

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

Qualcuno ha un'idea al riguardo?


Sei stato in grado di trovare una soluzione a questo problema? Sto avendo esattamente gli stessi sintomi.
Gani Simsek,

Ehi Gani, non ne sono sicuro. Ho scritto la mia soluzione "non-sicuro-se-funziona" qui serverfault.com/a/426599/111458 . Per favore, scusa la mia risposta tardiva. Se hai ancora bisogno della soluzione, prova la mia risposta e fammi sapere se ha funzionato =)
Aurelin

Risposte:


7

Il mio istinto dice che hai un token di sicurezza molto grande, probabilmente perché l'utente è un membro di un gran numero di gruppi. L'implementazione di AD Kerberos fornirà ad Apache un Privilege Attribute Certificate (PAC) per impostazione predefinita. Questa struttura può essere estesa se l'utente è membro di un numero significativo di gruppi. È possibile utilizzare lo tokensz.exestrumento per visualizzare la dimensione del token dell'utente.

Se questo è il problema, è possibile modificare l'attributo UserAccountControl dell'account dell'utente per impedire l'invio del PAC.

Potresti riuscire a cavartela modificando il tuo /etc/krb5.conffile in modo che faccia riferimento al KDC come kdc = tcp/kdc.name.here. Questo problema può verificarsi se il PAC causa un token troppo grande per un datagramma UDP, ma forzare la comunicazione con KDC con TCP è anche una soluzione alternativa.

La modifica di tale valore su 1.000 utenti non è difficile per i tuoi amministratori AD se risolve il tuo problema.


(Accidenti, ho cancellato per sbaglio il commento. Sto ancora dormendo, a quanto pare) Beh, quindi potrei chiedere loro se lo cambieranno, ma ne dubito a causa dell'org. struttura. E non è che il mio progetto sia molto importante, quindi .. Proverò prima la modifica di /etc/krb5.conf .. Grazie. A proposito, hai idea del perché questo problema si verifica solo in IE, ma non in Opera o Firefox?
Aurelin,

Ho provato a modificare /etc/krb5.conf, ma questo non lo risolve affatto. Un'altra cosa che ho appena capito è che il tuo link descrive solo una soluzione per server Win2k3, ma eseguiamo Win2k8 RC2. Ho dimenticato di dirlo, scusa.
Aurelin,

Bene .. Devo dire che è stato un po 'strano
Aurelin

2

Ho riscontrato questo errore in un sito Drupal 7 in Safari su Mac e ho scoperto che chiudere le finestre del browser e svuotare la cache del browser, uscire dal browser, riaprirlo e ricaricare la pagina ha funzionato per interrompere l'errore che è successo solo questa volta.

Richiesta errata Il browser ha inviato una richiesta che questo server non è in grado di comprendere. > La dimensione di un campo di intestazione della richiesta supera il limite del server. Cookie / n


2
Mi sembra una soluzione "Microsoft": riavviare e sperare che il problema scompaia.
Colin 't Hart,

1
@Colin, indipendentemente da quanto possa sembrare una risposta "Microsoft", molte volte è esattamente ciò che è richiesto. Quando si cancella la cache di un browser, molti browser non riescono a svuotare la cache in memoria, quindi la necessità di riavviare il browser. Si applica sicuramente alle versioni Mac di Firefox, Chrome e Camino. Non uso mai Safari, quindi non posso commentarlo.
John Gardeniers,

1

Ho trovato un'altra soluzione, anche se non sono sicuro che funzioni davvero. Apache Docs afferma che per i grandi pacchetti dovrò impostare LimitRequestFieldSize e / o LimitRequestLine.

Il fatto è che se si desidera impostare il valore di LimitRequestLine su qualcosa di superiore a 8 KB, è necessario modificare l'origine e ricompilare Apache, poiché 8 KB è il maxSize fisso ( http://httpd.apache.org/docs/ 2.2 / mod / core.html # limitrequestline ).

Non so per certo se questo metodo funziona, perché ho reinstallato apache dal nostro repository su un secondo server in seguito. Sembra che questa fosse una versione del pacchetto diversa in quanto il problema non si è verificato lì.


Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.