Linux 上の .NET 用の既定の TLS 暗号スイート

Linux 上の .NET で、SslStream クラスを介した TLS/SSL を実行するとき、または HttpClient クラスを介した HTTPS などの上位レベルの操作を実行するとき、既定の TLS 暗号スイートとして OpenSSL 構成が尊重されるようになりました。 既定の暗号スイートを明示的に構成していない場合、Linux 上の .NET で許可される暗号スイートの一覧は厳しく制限されます。

変更内容

以前のバージョンの .NET で、システム構成で既定の暗号スイートは考慮されません。 Linux 上の .NET の既定の暗号スイートの一覧は、ほとんど制約を課しません。

.NET 5 以降で、Linux 上の .NET は、openssl.cnf で指定されている場合、既定の暗号スイートとして OpenSSL 構成が尊重されます。 暗号スイートを明示的に構成しない場合、許可される暗号スイートは次のみになります。

  • 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 と互換性のある暗号スイートは含まれていないため、これらの古いプロトコル バージョンは実質的に既定で無効です。

特定のセッションで SslStream に CipherSuitePolicy 値を指定しても、構成ファイルの内容や .NET フォールバックの既定は置き換えられます。

変更理由

Linux で .NET を実行しているユーザーから、サードパーティの評価ツールでセキュリティの評価が高いものに 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 ファイルは、Linux 上の .NET 5 以降の既定の暗号スイートのポリシーに相当する、それの最小限のファイルです。 システム ファイルを置き換える代わりに、お使いのシステム上のファイルにこれらの概念をマージしてください。

    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、Fedora の各ディストリビューションでの .NET アプリケーションの既定は、システム全体の暗号化ポリシーによって許可されている暗号スイートです。 これらのディストリビューションでは、OpenSSL 構成ファイルを変更する代わりに暗号化ポリシー構成を使用します。

影響を受ける API

該当なし