1. ホーム
  2. .net

[解決済み】.NET 4.5でのデフォルトのSecurityProtocolについて

2022-03-29 01:53:41

質問

をサポートするサーバーと通信するためのデフォルトのセキュリティプロトコルは何ですか? TLS 1.2 ? ウィル .NET は、デフォルトでサーバー側でサポートされている最も高いセキュリティプロトコルを選択するのか、それともこのコード行を明示的に追加しなければならないのか。

System.Net.ServicePointManager.SecurityProtocol = 
SecurityProtocolType.Tls | SecurityProtocolType.Tls11 | SecurityProtocolType.Tls12;

このデフォルトを変更する方法は、コード変更以外にあるのでしょうか?

最後に .NET 4.0 までしかサポートしていません。 TLS 1.0 をサポートするために、クライアントのプロジェクトを4.5にアップグレードしなければならないのです。 TLS 1.2 .

私の動機は SSLv3 がサポートする場合でも、クライアント側でこれを無効にし(私はすでにマシンのレジストリでこれを無効にするパワーシェルスクリプトを持っています)、サーバーがサポートする最高のTLSプロトコルをサポートするようにします。

更新しました。 を見てみると ServicePointManager のクラスは .NET 4.0 には列挙された値はないようですね。 TLS 1.01.1 . 両者とも .NET 4.0/4.5 で、デフォルトは SecurityProtocolType.Tls|SecurityProtocolType.Ssl3 . を無効にしても、このデフォルトが壊れないことを祈ります。 SSLv3 をレジストリに登録します。

しかし、私はすべてのアプリをアップグレードして .NET 4.5 を明示的に追加し SecurityProtocolType.Tls | SecurityProtocolType.Tls11 | SecurityProtocolType.Tls12; を、すべてのアプリケーションのブートストラップコードに追加してください。

これは、様々なAPIやサービスに対して、ダウングレードしないようにアウトバウンドリクエストを行うものです。 SSLv3 を選択し、最高レベルの TLS .

この方法は合理的だと思いますか、それともやりすぎでしょうか?私は多くのアプリケーションをアップデートする必要があります。 TLS 1.0 は近い将来、一部のプロバイダーで非推奨となる可能性があります。

APIへのアウトバウンドリクエストを行うクライアントとして、レジストリでSSL3を無効にすることは、.NETフレームワークでも効果があるのでしょうか?デフォルトでは、TLS 1.1と1.2は有効になっていないようですが、レジストリで有効にする必要があるのでしょうか?RE http://support.microsoft.com/kb/245030 .

少し調べたところ、レジストリの設定はIIS(サーバーのサブキー)とブラウザ(クライアントのサブキー)に適用されるため、影響はないと思われます。

この投稿は、複数の質問と、それに続く "多分" の答えになってしまい、申し訳ありません。

解決方法は?

他の回答でコメントを残している方の中には、「設定」を System.Net.ServicePointManager.SecurityProtocol を特定の値に設定すると、将来の.NETのアップデートでデフォルト値となる可能性のあるTLSのバージョンをアプリで利用できなくなります。 プロトコルの固定リストを指定する代わりに、次のようにしてください。

.NET 4.7以降の場合 を設定しないでください。 System.Net.ServicePointManager.SecurityProtocol . デフォルト値 ( SecurityProtocolType.SystemDefault ) は、アプリが作成された時点では存在しないかもしれない新しいバージョンも含め、オペレーティングシステムが知っていて設定されているすべてのバージョンを使用できるようにします。

.NET Frameworkの以前のバージョンの場合。 を使用すると、他のプロトコルをそのままにして、自分が知っている重要なプロトコルをオンまたはオフにすることができます。

他のプロトコルに影響を与えずに TLS 1.1 と 1.2 をオンにする。

System.Net.ServicePointManager.SecurityProtocol |= 
    SecurityProtocolType.Tls11 | SecurityProtocolType.Tls12;

を使用していることに注意してください。 |= を使えば、他のフラグをオフにすることなく、これらのフラグをオンにすることができます。

他のプロトコルに影響を与えずにSSL3をオフにすること。

System.Net.ServicePointManager.SecurityProtocol &= ~SecurityProtocolType.Ssl3;