Suite cipher TLS default untuk .NET di Linux
.NET, di Linux, sekarang menghormati konfigurasi OpenSSL untuk cipher suite default saat melakukan TLS/SSL melalui SslStream kelas atau operasi tingkat yang lebih tinggi, seperti HTTPS melalui HttpClient kelas . Ketika cipher suite default tidak dikonfigurasi secara eksplisit, .NET di Linux menggunakan daftar suite sandi yang diizinkan dengan ketat.
Deskripsi perubahan
Dalam versi .NET sebelumnya, .NET tidak menghormati konfigurasi sistem untuk cipher suite default. Daftar cipher suite default untuk .NET di Linux sangat permisif.
Mulai dari .NET 5, .NET di Linux menghormati konfigurasi OpenSSL untuk cipher suite default saat ditentukan di openssl.cnf. Ketika cipher suite tidak dikonfigurasi secara eksplisit, satu-satunya suite sandi yang diizinkan adalah sebagai berikut:
- Suite sandi 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
Karena default fallback ini tidak menyertakan suite sandi apa pun yang kompatibel dengan TLS 1.0 atau TLS 1.1, versi protokol lama ini secara efektif dinonaktifkan secara default.
Menyediakan nilai CipherSuitePolicy ke SslStream untuk sesi tertentu masih akan menggantikan konten file konfigurasi dan/atau default fallback .NET.
Alasan untuk berubah
Pengguna yang menjalankan .NET di Linux meminta agar konfigurasi SslStream default diubah menjadi yang memberikan peringkat keamanan tinggi dari alat penilaian pihak ketiga.
Versi yang diperkenalkan
5.0
Tindakan yang direkomendasikan
Default baru kemungkinan berfungsi saat berkomunikasi dengan klien atau server modern. Jika Anda perlu memperluas daftar cipher suite default untuk menerima klien lama (atau untuk menghubungi server warisan), gunakan salah satu solusi berikut:
Tentukan kebijakan kriptografi dengan mengonfigurasi CipherSuitesPolicy jenis yang berkaitan dengan SslServerAuthenticationOptions.CipherSuitesPolicy atau 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); // ... }
Atau, untuk 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)) { // ... }
Ubah file konfigurasi OpenSSL. Pada banyak distribusi Linux, file konfigurasi OpenSSL berada di /etc/ssl/openssl.cnf.
Sampel file openssl.cnf ini adalah file minimal yang setara dengan kebijakan cipher suite default untuk .NET 5 dan yang lebih baru di Linux. Alih-alih mengganti file sistem, gabungkan konsep ini dengan file yang ada di sistem Anda.
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
Pada distribusi Red Hat Enterprise Linux, CentOS Stream, dan Fedora, aplikasi .NET default ke cipher suite yang diizinkan oleh kebijakan kriptografi di seluruh sistem. Pada distribusi ini, gunakan konfigurasi kebijakan kripto alih-alih mengubah file konfigurasi OpenSSL.
API yang Terpengaruh
T/A