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?

Aurelin
fonte
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.

Evan Anderson
fonte
(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

Dean Flory
fonte
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á.

Aurelin
fonte