Share via


Pacotes de criptografia TLS padrão para .NET no Linux

O .NET, no Linux, agora respeita a configuração do OpenSSL para pacotes de criptografia padrão ao executar TLS/SSL por meio da classe SslStream ou operações de nível superior, como HTTPS por meio da classe HttpClient. Quando os pacotes de criptografia padrão não são configurados explicitamente, o .NET no Linux usa uma lista restrita de pacotes de criptografia permitidos.

Descrição das alterações

Nas versões anteriores do .NET, o .NET não respeitava a configuração do sistema para pacotes de criptografia padrão. A lista de pacotes de criptografia padrão para .NET no Linux é muito permissiva.

Do .NET 5 em diante, o .NET no Linux respeita a configuração do OpenSSL para pacotes de criptografia padrão quando especificada em openssl.cnf. Quando os pacotes de criptografia não são configurados explicitamente, os únicos pacotes de criptografia permitidos são os seguintes:

  • Pacotes de criptografia do TLS 1.3
  • TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384
  • TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256
  • TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384
  • TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256
  • TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384
  • TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256
  • TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384
  • TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256

Como esse padrão de fallback não inclui nenhum pacote de criptografia compatível com o TLS 1.0 ou o TLS 1.1, essas versões de protocolo mais antigas foram desabilitadas efetivamente por padrão.

Um valor de CipherSuitePolicy fornecido a SslStream para uma sessão específica ainda substituirá o conteúdo do arquivo de configuração e/ou o padrão de fallback do .NET.

Motivo da alteração

Os usuários que executam o .NET no Linux solicitaram que a configuração padrão de SslStream fosse alterada para uma que fornecesse uma classificação de segurança alta de ferramentas de avaliação de terceiros.

Versão introduzida

5,0

Os novos padrões provavelmente funcionarão em comunicações com clientes ou servidores modernos. Se precisar expandir a lista de pacotes de criptografia padrão para aceitar clientes herdados (ou entrar em contato com servidores herdados), use uma das seguintes soluções alternativas:

  • Especifique uma política de criptografia configurando o tipo CipherSuitesPolicy com relação a SslServerAuthenticationOptions.CipherSuitesPolicy ou SslClientAuthenticationOptions.CipherSuitesPolicy.

    var clientOpts = new SslClientAuthenticationOptions
    {
        // ...
        CipherSuitesPolicy = new CipherSuitesPolicy(
            new[]
            {
                TlsCipherSuite.TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,
                TlsCipherSuite.TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,
            }),
    };
    
    using (SslStream sslStream = new SslStream(networkStream))
    {
        sslStream.AuthenticateAsClient(clientOptions);
        // ...
    }
    

    Ou, para HttpClient:

    var handler = new SocketsHttpHandler
    {
        SslOptions =
        {
            CipherSuitesPolicy = new CipherSuitesPolicy(
                new[]
                {
                    TlsCipherSuite.TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,
                    TlsCipherSuite.TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,
                }),
        },
    };
    
    using (var httpClient = new HttpClient(handler))
    {
        // ...
    }
    
  • Altere o arquivo de configuração OpenSSL. Em muitas distribuições do Linux, o arquivo de configuração do OpenSSL está em /etc/ssl/openssl.cnf.

    Este arquivo openssl.cnf de exemplo é um arquivo mínimo equivalente à política de pacotes de criptografia padrão do .NET 5 e posteriores no Linux. Em vez de substituir o arquivo do sistema, mescle esses conceitos com o arquivo presente em seu sistema.

    openssl_conf = default_conf
    
    [default_conf]
    ssl_conf = ssl_sect
    
    [ssl_sect]
    system_default = system_default_sect
    
    [system_default_sect]
    CipherString = ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA256
    

Nas distribuições Red Hat Enterprise Linux, CentOS e Fedora, os aplicativos do .NET usam como padrão os pacotes de criptografia permitidos pelas políticas de criptografia em todo o sistema. Nessas distribuições, use a configuração de políticas de criptografia em vez de alterar o arquivo de configuração OpenSSL.

APIs afetadas

N/D