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

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