Partager via


Suites de chiffrement TLS par défaut pour .NET sur Linux

.NET, sur Linux, respecte désormais la configuration OpenSSL pour les suites de chiffrement par défaut lors de l’exécution de TLS/SSL via la classe SslStream ou des opérations de niveau supérieur, telles que HTTPS via la classe HttpClient. Lorsque les suites de chiffrement par défaut ne sont pas configurées explicitement, .NET sur Linux utilise une liste strictement restreinte de suites de chiffrement autorisées.

Description de la modification

Dans les versions .NET précédentes, .NET ne respecte pas la configuration système pour les suites de chiffrement par défaut. La liste de suite de chiffrement par défaut pour .NET sur Linux est très permissive.

À compter de .NET 5, .NET sur Linux respecte la configuration OpenSSL pour les suites de chiffrement par défaut lorsqu’elle est spécifiée dans openssl.cnf. Lorsque les suites de chiffrement ne sont pas configurées explicitement, les seules suites de chiffrement autorisées sont les suivantes :

  • Suites de chiffrement 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

Étant donné que cette valeur par défaut de secours n’inclut aucune suite de chiffrement compatible avec TLS 1.0 ou TLS 1.1, ces anciennes versions de protocole sont désactivées par défaut.

La fourniture d’une valeur CipherSuitePolicy à SslStream pour une session spécifique remplace toujours le contenu du fichier config et/ou la valeur par défaut de l’élément Fallback .NET.

Raison du changement

Les utilisateurs exécutant .NET sur Linux ont demandé que la configuration par défaut pour SslStream soit remplacée par une configuration qui fournissait une évaluation de sécurité élevée à partir d’outils d’évaluation tiers.

Version introduite

5,0

Les nouvelles valeurs par défaut sont susceptibles de fonctionner lors de la communication avec des clients ou serveurs modernes. Si vous devez développer la liste de la suite de chiffrement par défaut pour accepter les clients hérités (ou pour contacter les serveurs hérités), utilisez l’une des solutions de contournement suivantes :

  • Spécifiez une stratégie de chiffrement en configurant le type CipherSuitesPolicy en fonction de 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, pour 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))
    {
        // ...
    }
    
  • Modifiez le fichier config OpenSSL. Sur de nombreuses distributions Linux, le fichier config OpenSSL se trouve dans /etc/ssl/openssl.cnf.

    Cet exemple de fichier openssl.cnf est un fichier minimal équivalent à la stratégie de suites de chiffrement par défaut pour .NET 5 et versions ultérieures sur Linux. Au lieu de remplacer le fichier système, fusionnez ces concepts avec le fichier présent sur votre système.

    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
    

Sur les distributions Red Hat Enterprise Linux, CentOS et Fedora, les applications .NET sont par défaut les suites de chiffrement autorisées par les stratégies de chiffrement à l’échelle du système. Sur ces distributions, utilisez la configuration des stratégies de chiffrement au lieu de modifier le fichier config OpenSSL.

API affectées

N/A