Share via


Kestrel: HTTP/2 desabilitado via TLS em versões incompatíveis do Windows

Para habilitar o HTTP/2 no TLS (Transport Layer Security) no Windows, dois requisitos precisam ser atendidos:

  • Suporte para ALPN (Application-Layer Protocol Negotiation), disponível desde o Windows 8.1 e o Windows Server 2012 R2.
  • Um conjunto de criptografias compatíveis com HTTP/2, que está disponível desde o Windows 10 e o Windows Server 2016.

Dessa forma, o comportamento de Kestrel quando o HTTP/2 no TLS está configurado foi alterado para:

  • Faça o downgrade para Http1 e registre uma mensagem no nível Information em que ListenOptions.HttpProtocols está definido como Http1AndHttp2. Http1AndHttp2 é o valor padrão do ListenOptions.HttpProtocols.
  • Gere um NotSupportedException quando ListenOptions.HttpProtocols estiver definido como Http2.

Para discussão, confira o problema dotnet/aspnetcore#23068.

Versão introduzida

ASP.NET Core 5.0

Comportamento antigo

A tabela a seguir descreve o comportamento quando o HTTP/2 no TLS está configurado.

Protocolos Windows 7,
Windows Server 2008 R2,
ou anterior
Windows 8,
Windows Server 2012
Windows 8.1,
Windows Server 2012 R2
Windows 10,
Windows Server 2016,
ou mais recente
Http2 Throw NotSupportedException Erro durante o handshake do TLS Erro durante o handshake do TLS * Nenhum erro
Http1AndHttp2 Downgrade para Http1 Downgrade para Http1 Erro durante o handshake do TLS * Nenhum erro

* Configure conjuntos de criptografia compatíveis para habilitar esses cenários.

Novo comportamento

A tabela a seguir descreve o comportamento quando o HTTP/2 no TLS está configurado.

Protocolos Windows 7,
Windows Server 2008 R2,
ou anterior
Windows 8,
Windows Server 2012
Windows 8.1,
Windows Server 2012 R2
Windows 10,
Windows Server 2016,
ou mais recente
Http2 Throw NotSupportedException Throw NotSupportedException Throw NotSupportedException ** Nenhum erro
Http1AndHttp2 Downgrade para Http1 Downgrade para Http1 Downgrade para Http1 ** Nenhum erro

** Configure conjuntos de criptografia compatíveis e defina a opção de contexto do aplicativo Microsoft.AspNetCore.Server.Kestrel.EnableWindows81Http2 para true a fim de habilitar esses cenários.

Motivo da alteração

Essa alteração garante que os erros de compatibilidade do HTTP/2 no TLS em versões mais antigas do Windows sejam expostos o mais breve possível e da maneira mais clara.

Verifique se o HTTP/2 no TLS está desabilitado em versões incompatíveis do Windows. Windows 8.1 e Windows Server 2012 R2 são incompatíveis, pois não têm as criptografias necessárias por padrão. No entanto, é possível atualizar as configurações do computador para usar criptografias compatíveis com HTTP/2. Para obter mais informações, confira Conjuntos de criptografia TLS em Windows 8.1. Depois de configurado, o HTTP/2 no TLS do Kestrel deve ser habilitado definindo a opção de contexto do aplicativo Microsoft.AspNetCore.Server.Kestrel.EnableWindows81Http2. Por exemplo:

AppContext.SetSwitch("Microsoft.AspNetCore.Server.Kestrel.EnableWindows81Http2", true);

Nenhum suporte subjacente foi alterado. Por exemplo, HTTP/2 no TLS nunca funcionou em Windows 8 ou Windows Server 2012. Essa alteração modifica como os erros nesses cenários sem suporte são apresentados.

APIs afetadas

Nenhum