Share via


Kestrel: versões do protocolo TLS com suporte padrão alteradas

O Kestrel agora usa as versões de protocolo TLS padrão do sistema em vez de restringir conexões com os protocolos TLS 1.1 e TLS 1.2 como antes.

Essa alteração permite:

  • Que o TLS 1.3 seja usado por padrão em ambientes que dão suporte a ele.
  • Que o TLS 1.0 seja usado em alguns ambientes (como Windows Server 2016 por padrão), o que geralmente não é desejável.

Para discussão, consulte o problema dotnet/aspnetcore#22563.

Versão introduzida

5.0 Versão Prévia 6

Comportamento antigo

O Kestrel exigia que as conexões usassem o TLS 1.1 ou o TLS 1.2 por padrão.

Novo comportamento

Permite que o sistema operacional escolha o melhor protocolo a ser usado e bloqueie protocolos que não são seguros. HttpsConnectionAdapterOptions.SslProtocols agora é padrão para SslProtocols.None em vez de SslProtocols.Tls12 | SslProtocols.Tls11.

Motivo da alteração

A alteração foi feita para dar suporte ao TLS 1.3 e versões futuras do TLS por padrão à medida que elas ficam disponíveis.

Você deve usar esse valor, a menos que o aplicativo tenha um motivo específico para não usá-lo. Verifique se o sistema está configurado para permitir apenas protocolos seguros.

Para desabilitar protocolos mais antigos, execute uma das seguintes ações:

  • Desabilite protocolos mais antigos, como o TLS 1.0, em todo o sistema com as instruções do Windows. No momento, ele está habilitado por padrão em todas as versões do Windows.

  • Selecione manualmente a quais protocolos você deseja dar suporte no código da seguinte maneira:

    using System.Security.Authentication;
    using Microsoft.AspNetCore.Hosting;
    using Microsoft.Extensions.Hosting;
    
    public class Program
    {
        public static void Main(string[] args) =>
            CreateHostBuilder(args).Build().Run();
    
        public static IHostBuilder CreateHostBuilder(string[] args) =>
            Host.CreateDefaultBuilder(args)
                .ConfigureWebHostDefaults(webBuilder =>
                {
                    webBuilder.UseKestrel(kestrelOptions =>
                    {
                        kestrelOptions.ConfigureHttpsDefaults(httpsOptions =>
                        {
                            httpsOptions.SslProtocols = SslProtocols.Tls12 | SslProtocols.Tls13;
                        });
                    });
    
                    webBuilder.UseStartup<Startup>();
                });
    }
    

Infelizmente, não há API para excluir protocolos específicos.

APIs afetadas

HttpsConnectionAdapterOptions.SslProtocols