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ívelInformation
em que ListenOptions.HttpProtocols está definido comoHttp1AndHttp2
.Http1AndHttp2
é o valor padrão doListenOptions.HttpProtocols
. - Gere um
NotSupportedException
quandoListenOptions.HttpProtocols
estiver definido comoHttp2
.
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.
Ação recomendada
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