Linux üzerinde .NET için varsayılan TLS şifreleme paketleri
Linux üzerinde .NET artık sınıf üzerinden TLS/SSL veya sınıf aracılığıyla SslStream HTTPS gibi üst düzey işlemler yaparken varsayılan şifreleme paketleri için OpenSSL yapılandırmasına saygı duymaktadır HttpClient . Varsayılan şifreleme paketleri açıkça yapılandırılmadığında, Linux üzerinde .NET izin verilen şifreleme paketlerinin sıkı bir şekilde kısıtlanmış bir listesini kullanır.
Açıklama değiştirildi
Önceki .NET sürümlerinde .NET, varsayılan şifreleme paketleri için sistem yapılandırmasına uygun değildir. Linux üzerinde .NET için varsayılan şifreleme paketi listesi çok izin vericidir.
.NET 5'den başlayarak Linux üzerinde .NET, opensl.cnf dosyasında belirtildiğinde varsayılan şifreleme paketleri için OpenSSL yapılandırmasına saygı gösterir. Şifre paketleri açıkça yapılandırılmadığında, izin verilen tek şifreleme paketleri şunlardır:
- TLS 1.3 şifreleme paketleri
- 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
Bu geri dönüş varsayılanı TLS 1.0 veya TLS 1.1 ile uyumlu herhangi bir şifreleme paketi içermediğinden, bu eski protokol sürümleri varsayılan olarak etkin bir şekilde devre dışı bırakılır.
Belirli bir oturum için SslStream'e CipherSuitePolicy değeri sağlanması, yapılandırma dosyası içeriğinin ve/veya .NET geri dönüş varsayılan değerinin yerini almaya devam eder.
Değişiklik nedeni
Linux üzerinde .NET çalıştıran kullanıcılar için SslStream varsayılan yapılandırmanın, üçüncü taraf değerlendirme araçlarından yüksek güvenlik derecelendirmesi sağlayan bir yapılandırmayla değiştirilmesini istedi.
Sürüm kullanıma sunulmuştur
5.0
Önerilen eylem
Yeni varsayılanlar, modern istemcilerle veya sunucularla iletişim kurarken büyük olasılıkla çalışır. Eski istemcileri kabul etmek (veya eski sunuculara başvurmak için) varsayılan şifreleme paketi listesini genişletmeniz gerekiyorsa, aşağıdaki geçici çözümlerden birini kullanın:
veya SslClientAuthenticationOptions.CipherSuitesPolicyile ilgili türü SslServerAuthenticationOptions.CipherSuitesPolicy yapılandırarak CipherSuitesPolicy bir şifreleme ilkesi belirtin.
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); // ... }
Veya için 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)) { // ... }
OpenSSL yapılandırma dosyasını değiştirin. Birçok Linux dağıtımında OpenSSL yapılandırma dosyası /etc/ssl/openssl.cnf konumundadır.
Bu örnek openssl.cnf dosyası, Linux üzerinde .NET 5 ve üzeri için varsayılan şifreleme paketleri ilkesine eşdeğer olan en düşük bir dosyadır. Sistem dosyasını değiştirmek yerine, bu kavramları sisteminizde bulunan dosyayla birleştirin.
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
Red Hat Enterprise Linux, CentOS ve Fedora dağıtımlarında .NET uygulamaları, sistem genelinde şifreleme ilkeleri tarafından izin verilen şifreleme paketlerine varsayılan olarak uygulanır. Bu dağıtımlarda, OpenSSL yapılandırma dosyasını değiştirmek yerine şifreleme ilkeleri yapılandırmasını kullanın.
Etkilenen API’ler
Yok
Geri Bildirim
https://aka.ms/ContentUserFeedback.
Çok yakında: 2024 boyunca, içerik için geri bildirim mekanizması olarak GitHub Sorunları’nı kullanımdan kaldıracak ve yeni bir geri bildirim sistemiyle değiştireceğiz. Daha fazla bilgi için bkz.Gönderin ve geri bildirimi görüntüleyin