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
Zalecana akcja
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 Stream 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