Поделиться через


Комплекты шифров TLS по умолчанию для .NET в Linux

Теперь .NET для Linux учитывает конфигурацию OpenSSL для наборов шифров по умолчанию при выполнении шифрования TLS/SSL с помощью класса SslStream или операций более высокого уровня, таких как HTTPS с помощью класса HttpClient. Если комплекты шифров по умолчанию не настроены явно, .NET для Linux использует строго ограниченный список разрешенных комплектов шифров.

Описание изменения

В предыдущих версиях .NET не учитывается конфигурация системы для комплектов шифров по умолчанию. Список комплектов шифров по умолчанию для .NET в Linux является нестрогим.

Начиная с .NET 5 .NET для Linux учитывает конфигурацию OpenSSL для комплектов шифров по умолчанию, если она указана в файле openssl.cnf. Если комплекты шифров не настроены явно, единственными разрешенными комплектами шифров являются следующие:

  • Комплекты шифров 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

Поскольку это резервное значение по умолчанию не включает комплекты шифров, которые совместимы с TLS 1.0 или TLS 1.1, эти старые версии протоколов по умолчанию отключаются.

Если указано значение CipherSuitePolicy для SslStream для конкретного сеанса, по-прежнему будет заменяться содержимое файла конфигурации и (или) резервное значение по умолчанию .NET.

Причина изменения

Пользователи, работающие с .NET для Linux, запрашивают изменение конфигурации по умолчанию для SslStream на ту, которая обеспечивает высокую степень безопасности согласно результатам сторонних средств оценки.

Представленные версии

5,0

Новые значения по умолчанию, скорее всего, будут работать при взаимодействии с современными клиентами или серверами. Если вам нужно развернуть список наборов шифров по умолчанию, чтобы принять устаревшие клиенты (или связаться с устаревшими серверами), используйте одно из следующих обходных решений:

  • Укажите политику шифрования, настроив CipherSuitesPolicy тип, который относится к SslServerAuthenticationOptions.CipherSuitesPolicy нему или 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);
        // ...
    }
    

    Или для 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. Во многих дистрибутивах Linux файл конфигурации OpenSSL находится по пути /etc/ssl/openssl.cnf.

    В этом примере файл openssl.cnf определяет минимальный набор правил, эквивалентный заданной по умолчанию политике комплектов шифров для .NET 5 и более поздних версий для Linux. Вместо замены системного файла объедините эти понятия с файлом, который присутствует в вашей системе.

    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 Stream и Fedora приложения .NET по умолчанию предназначены для наборов шифров, разрешенных политиками шифрования на уровне системы. В этих дистрибутивах используйте конфигурацию политик шифрования вместо изменения файла конфигурации OpenSSL.

Затронутые API

Н/Д