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