Respostas de HTTP 400 - Solicitação Incorreta (Cabeçalho de Solicitação muito longo) para solicitações HTTP

Quando uma solicitação HTTP que precisa de autenticação Kerberos é enviada para um site hospedado no IIS (Serviços de Informações da Internet) e está configurada para usar a autenticação Kerberos, o cabeçalho de solicitação HTTP seria muito longo. Este artigo ajuda você a contornar o erro HTTP 400 que ocorre quando o cabeçalho da solicitação HTTP é muito longo.

Versão original do produto: Windows Server 2016
Número original do KB: 2020943

Sintomas

Uma solicitação HTTP que precisa da autenticação Kerberos é enviada de um navegador para um site hospedado no IIS. O site está configurado para usar a autenticação Kerberos. No entanto, em vez de receber a página da Web esperada, você recebe uma mensagem de erro semelhante à seguinte:

HTTP 400 – Solicitação Incorreta (Cabeçalho de solicitação muito longo)

Essa resposta pode ser gerada por qualquer solicitação HTTP que inclua WinRM (Gerenciamento Remoto do Windows).

Motivo

Esse problema poderá ocorrer se o usuário for membro de muitos grupos de usuários do Active Directory.

A solicitação HTTP para o servidor contém o token Kerberos no cabeçalho WWW-Authenticate. O tamanho do cabeçalho aumenta junto com o número de grupos de usuários. Se o cabeçalho HTTP ou o tamanho do pacote aumentar além dos limites configurados no servidor, o servidor poderá rejeitar a solicitação e enviar uma mensagem de erro como a resposta.

Solução alternativa 1: diminuir o número de grupos do Active Directory

Diminua o número de grupos do Active Directory dos quais o usuário é membro.

Solução alternativa 2: defina as entradas do Registro MaxFieldLength e MaxRequestBytes

Aumente as configurações de MaxFieldLength e das entradas do Registro MaxRequestBytes no servidor para que os cabeçalhos de solicitação do usuário não excedam esses valores. Para determinar as configurações apropriadas, use os seguintes cálculos:

  1. Calcule o tamanho do token Kerberos do usuário usando a fórmula descrita no seguinte artigo:
    Problemas com a autenticação Kerberos quando um usuário pertence a vários grupos.

  2. Defina o valor de MaxFieldLength e MaxRequestBytes no servidor como 4/3 * T bytes, sendo que T é o tamanho do token do usuário em bytes. O HTTP codifica o token Kerberos usando a codificação base64.

    Observação

    Isso é substituído a cada três bytes no token por quatro bytes codificados em base64. As alterações feitas no Registro não entram em vigor até que você reinicie o serviço HTTP. Além disso, talvez seja necessário reiniciar quaisquer serviços relacionados, como serviços do IIS.

Dependendo do ambiente do aplicativo, você também pode contornar esse problema configurando o site para usar Windows NTLM (NT LAN Manager) em vez de Kerberos. Alguns ambientes de aplicativo exigem que a autenticação Kerberos seja usada para delegação. Consideramos a autenticação Kerberos mais segura do que o NTLM. E recomendamos que você não desabilite a autenticação Kerberos antes de considerar as ramificações de segurança e delegação.

Mais informações

Por padrão, não há nenhuma entrada do Registro MaxFieldLength. Essa entrada especifica o limite de tamanho máximo de cada cabeçalho de solicitação HTTP. A entrada do Registro MaxRequestBytes especifica o limite superior para o tamanho total da linha de Solicitação e dos cabeçalhos. Normalmente, essa entrada do Registro é configurada junto com a entrada do Registro MaxRequestBytes. Se o valor MaxRequestBytes for menor que o valor MaxFieldLength, o valor MaxFieldLength será ajustado. Em ambientes grandes do Active Directory, os usuários poderão ter falhas de logon se os valores de ambas as entradas não estiverem definidos com um valor suficientemente alto.

Para o IIS 6.0 e posterior, as chaves do Registro MaxFieldLength e MaxRequestBytes estão localizados na seguinte subchave:
HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\HTTP\Parameters

Os valores da chave são mostrados na tabela a seguir:

Nome Tipo de Valor Dados do Valor
MaxFieldLength DWORD (4/3 * T bytes) + 200
MaxRequestBytes DWORD (4/3 * T bytes) + 200

Você também pode definir as chaves do Registro para seus valores máximos, conforme mostrado na tabela a seguir. Considere todas as possíveis ramificações de segurança antes de fazer alterações nas configurações do Registro.

Nome Tipo de Valor Dados do Valor
MaxFieldLength DWORD 65536 (Dec) ou 10000 (Hex)
MaxRequestBytes DWORD 16777216 (Dec) ou 1000000 (Hex)

Importante

A alteração dessas chaves do Registro deve ser considerada extremamente perigosa. Essas chaves permitem que pacotes HTTP maiores sejam enviados para o IIS. Isso, por sua vez, pode fazer Http.sys usar mais memória. Portanto, essas alterações podem aumentar a vulnerabilidade do computador a ataques mal-intencionados.

Se MaxFieldLength for definido como seu valor máximo de 64 KB, o valor do Registro MaxTokenSize deverá ser definido como 3/4 * 64 = 48 KB. Para obter mais informações sobre a configuração MaxTokenSize, consulte Problemas com a autenticação Kerberos quando um usuário pertence a vários grupos.

Referências