Partilhar via


Pacotes de codificação TLS padrão para .NET no Linux

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

Alterar a descrição

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

A partir do .NET 5, o .NET no Linux respeita a configuração do OpenSSL para pacotes de codificação padrão quando é especificado em openssl.cnf. Quando os pacotes de codificação não são explicitamente configurados, os únicos pacotes de codificação permitidos são os seguintes:

  • Pacotes de codificação 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 conjunto de codificação compatível com TLS 1.0 ou TLS 1.1, essas versões de protocolo mais antigas são efetivamente desabilitadas por padrão.

Fornecer um valor CipherSuitePolicy para 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.

Razão para a alteração

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

Versão introduzida

5.0

É provável que os novos padrões funcionem ao se comunicar com clientes ou servidores modernos. Se você precisar expandir a lista de pacotes de codificação 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 CipherSuitesPolicy tipo como ele pertence 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 Linux, o arquivo de configuração OpenSSL está em /etc/ssl/openssl.cnf.

    Este arquivo openssl.cnf de exemplo é um arquivo mínimo equivalente à política padrão de pacotes de codificação para .NET 5 e posterior no Linux. Em vez de substituir o arquivo do sistema, mescle esses conceitos com o arquivo que está presente no 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 Stream e Fedora, os aplicativos .NET usam como padrão os pacotes de codificação permitidos pelas políticas criptográficas de todo o sistema. Nessas distribuições, use a configuração de políticas de criptografia em vez de alterar o arquivo de configuração do OpenSSL.

APIs afetadas

N/A