Domyślne zestawy szyfrowania TLS dla platformy .NET w systemie Linux

Platforma .NET w systemie Linux uwzględnia teraz konfigurację protokołu OpenSSL dla domyślnych zestawów szyfrowania podczas wykonywania protokołu TLS/SSL za pośrednictwem operacji klasy lub wyższego HttpClient poziomu, takich jak HTTPS za pośrednictwem SslStream klasy. Jeśli domyślne zestawy szyfrowania nie są jawnie skonfigurowane, platforma .NET w systemie Linux używa ściśle ograniczonej listy dozwolonych zestawów szyfrowania.

Opis zmiany

W poprzednich wersjach platformy .NET platforma .NET nie uwzględnia konfiguracji systemu dla domyślnych zestawów szyfrowania. Domyślna lista zestawów szyfrowania dla platformy .NET w systemie Linux jest bardzo permissywna.

Począwszy od platformy .NET 5, platforma .NET w systemie Linux uwzględnia konfigurację protokołu OpenSSL dla domyślnych zestawów szyfrowania, gdy jest określona w pliku openssl.cnf. Jeśli zestawy szyfrowania nie są jawnie skonfigurowane, jedynymi dozwolonymi zestawami szyfrowania są następujące:

  • Zestawy szyfrowania 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

Ponieważ ta rezerwowa wartość domyślna nie obejmuje żadnych zestawów szyfrowania zgodnych z protokołem TLS 1.0 lub TLS 1.1, te starsze wersje protokołu są domyślnie wyłączone.

Podanie wartości CipherSuitePolicy na Wartość SslStream dla określonej sesji nadal spowoduje zastąpienie zawartości pliku konfiguracji i/lub domyślnej rezerwowej platformy .NET.

Przyczyna wprowadzenia zmiany

Użytkownicy z platformą .NET w systemie Linux zażądali zmiany domyślnej konfiguracji SslStream na taką, która dostarczyła wysoką ocenę zabezpieczeń z narzędzi do oceny innych firm.

Wprowadzona wersja

5,0

Nowe wartości domyślne mogą działać podczas komunikacji z nowoczesnymi klientami lub serwerami. Jeśli musisz rozwinąć domyślną listę zestawów szyfrowania, aby zaakceptować starszych klientów (lub skontaktować się ze starszymi serwerami), użyj jednego z następujących obejść:

  • Określ zasady kryptograficzne, konfigurując CipherSuitesPolicy typ, który dotyczy SslServerAuthenticationOptions.CipherSuitesPolicy elementu lub 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);
        // ...
    }
    

    Lub w przypadku polecenia 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))
    {
        // ...
    }
    
  • Zmień plik konfiguracji OpenSSL. W wielu dystrybucjach systemu Linux plik konfiguracji openSSL znajduje się w folderze /etc/ssl/openssl.cnf.

    Ten przykładowy plik openssl.cnf jest minimalnym plikiem, który jest odpowiednikiem domyślnych zasad zestawów szyfrowania dla platformy .NET 5 i nowszych w systemie Linux. Zamiast zastępować plik systemowy, scal te pojęcia z plikiem obecnym w systemie.

    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
    

W dystrybucjach Red Hat Enterprise Linux, CentOS i Fedora aplikacje platformy .NET są domyślnie dozwolone przez zasady kryptograficzne dla całego systemu. W tych dystrybucjach użyj konfiguracji zasad kryptograficznych zamiast zmiany pliku konfiguracji OpenSSL.

Dotyczy interfejsów API

Nie dotyczy