Solicitação incorreta do Apache "O tamanho de um campo de cabeçalho de solicitação excede o limite do servidor" com o Kerberos SSO


9

Estou configurando um SSO para usuários do Active Directory através de um site que é executado em um Apache (Apache2 no SLES 11.1) e, ao testar com o Firefox, tudo funciona bem. Mas quando tento abrir o site no Internet Explorer 8 (Windows 7), tudo o que recebo é

"Pedido ruim

Seu navegador enviou uma solicitação que este servidor não conseguiu entender.

O tamanho de um campo de cabeçalho de solicitação excede o limite do servidor.

Autorização: negociar [cadeia ultra longa] "

Meu vhost.cfg fica assim:

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

Também verifiquei se os cookies foram excluídos e tentei vários valores menores para LimitRequestFieldSize e LimitRequestLine.

Outra coisa que me parece estranha é que, mesmo com a depuração do LogLevel, não recebo nenhum registro sobre isso. A última linha do log é

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

Alguém tem uma idéia sobre isso?


Você conseguiu encontrar uma solução para esse problema? Estou tendo exatamente os mesmos sintomas.
— Gani Simsek

Hey Gani, não tenho certeza. Eu escrevi minha solução "não tenho certeza se funciona" aqui serverfault.com/a/426599/111458 . Por favor, desculpe minha resposta tardia. Se você ainda precisa da solução, tentar a minha resposta e deixe-me / nos saber se funcionou =)
— Aurelin

Respostas:


7

Meu intestino diz que você tem um token de segurança muito grande, possivelmente porque o usuário é membro de um grande número de grupos. A implementação do AD Kerberos fornecerá ao Apache um PAC ( Privilege Attribute Certificate ) por padrão. Essa estrutura pode ser grande se o usuário for membro de um número significativo de grupos. Você pode usar a tokensz.exeferramenta para ver o tamanho do token do usuário.

Se esse for o problema, você pode modificar o atributo UserAccountControl da conta do usuário para impedir que o PAC seja enviado.

Você poderá modificar seu /etc/krb5.confarquivo para fazer referência ao KDC como kdc = tcp/kdc.name.here. Esse problema pode ocorrer se o PAC fizer com que o token seja muito grande para um datagrama UDP, mas forçar a comunicação com o KDC com TCP também é uma solução possível.

Alterar esse valor para 1.000 usuários não é difícil para os administradores do AD, se resolver o seu problema.


(Caramba, excluí acidentalmente o comentário. Ainda estou dormindo, ao que parece) Bem, então posso perguntar se eles mudariam isso, mas duvido disso devido à organização. estrutura. E não é que meu projeto seja super importante, então ... tentarei primeiro a modificação do /etc/krb5.conf. Obrigado. Aliás, alguma idéia de por que esse problema ocorre apenas no IE, mas não no Opera nem no Firefox?
— Aurelin 22/02

Eu tentei modificar o /etc/krb5.conf, mas isso não corrige nada. Outra coisa que acabei de descobrir é que seu link descreve apenas uma solução para os servidores Win2k3, mas rodamos o Win2k8 RC2. Eu esqueci de mencionar isso, desculpe.
— Aurelin 22/02

Bem .. eu tenho que dizer que foi um pouco estranho
— Aurelin

2

Eu tive esse erro acontecendo em um site Drupal 7 no Safari no Mac e descobri que fechar as janelas do navegador e limpar o cache do navegador, sair do navegador, abri-lo novamente e recarregar a página funcionava para interromper o erro que só aconteceu desta vez.

Solicitação incorreta Seu navegador enviou uma solicitação que este servidor não conseguiu entender. > O tamanho de um campo de cabeçalho de solicitação excede o limite do servidor. Cookie / n


2
Parece uma solução "Microsoft" para mim: reinicie e espero que o problema desapareça.
— Colin 't Hart

1
@ Colin, independentemente de quanto isso possa parecer uma resposta "Microsoft", muitas vezes é exatamente isso que é necessário. Ao limpar o cache de um navegador, muitos navegadores não conseguem esvaziar o cache da memória, daí a necessidade de reiniciar o navegador. Certamente se aplica às versões para Mac do Firefox, Chrome e Camino. Eu nunca uso o Safari, então não posso comentar sobre isso.
— John Gardeniers 18/10/12

1

Encontrei outra solução, embora não tenha certeza se realmente funciona. O Apache Docs declara que, para pacotes grandes, terei que definir LimitRequestFieldSize e / ou LimitRequestLine.

O problema é que, se você quiser definir o valor de LimitRequestLine para algo maior que 8 KB, precisará modificar a fonte e recompilar o Apache, pois 8 KB é o maxSize fixo ( http://httpd.apache.org/docs/ 2.2 / mod / core.html # limitrequestline ).

Não sei ao certo se esse método funciona, porque reinstalei o apache de nosso próprio repositório em um segundo servidor posteriormente. Parece que esta era uma versão de pacote diferente, pois o problema não ocorreu lá.


Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.