web-dev-qa-db-ja.com

マシンによってServicePointManager.SecurityProtocolのデフォルト値が異なるのはなぜですか?

現在、私は問題を抱えており、厳密な答えを見つけることができません。

4.6.1フレームワークをターゲットとするASP.NET MVC 5アプリケーションがあり、その目標は、TLS 1.1/TLS 1.2プロトコルによって保護されているサードパーティのAPIと連携することです。

私は2つの環境でアプリケーションを実行しようとしました:

  • 私のローカルマシンのWindows 10と.NET 4.6.2 Framework、IIS Express;
  • サーバーマシンWindows Server 2012 with .NET 4.6.1、IIS 8.0;

問題は、ローカルで起動するとServicePointManager.SecurityProtocolのデフォルト値がSsl3, Tlsに設定されるため、APIをターゲットにできず、TLS 1.1/TLS 1.2を使用するためにアプリケーションの起動時にコーディングする必要があります:ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls11 | SecurityProtocolType.Tls12

サーバーでアプリケーションを実行すると、デフォルト値ServicePointManager.SecurityProtocolTls, Tls11, Tls12に設定されるため、適切に機能します。

ドキュメントによると、.NET Framework 4.6以降のバージョンで実行されるアプリケーションは、デフォルトでTLS 1.1/TLS 1.2を使用する必要があります。

ServicePointManager.SecurityProtocolのデフォルト値が異なるのはなぜですか? .NET Frameworkの構成が原因ですか?それともレジストリ設定?調べてみましたが、答えが見つかりませんでした。

14
Oleh Udovytskyi

MSDN:ServicePointManager.SecurityProtocolプロパティ

このプロパティには、意図的にデフォルト値がリストされていないことに注意してください。セキュリティ環境は常に変化しており、既知の弱点を回避するために、デフォルトのプロトコルと保護レベルは時間とともに変化します。デフォルトは、個々のマシン構成、インストールされているソフトウェア、適用されているパッチによって異なります。

MSDNブログ:WindowsでのSSL/TLSプロトコルのサポート

Windowsでは、SSL/TLSプロトコルのサポートはSCHANNELコンポーネントに関連付けられています。つまり、特定のOSバージョンがSSL/TLSバージョンをサポートしていない場合、これはサポートされないままであることを意味します。

MSDN:TLS/SSLの暗号スイート(Schannel SSP)

Windowsのバージョンによって、サポートするTLS暗号スイートと優先順位が異なります。 Microsoft Schannelプロバイダーによって選択されるデフォルトの順序については、対応するWindowsバージョンを参照してください。

つまり、これはWindowsのバージョンとそのパッチレベルによって決まります。

しかし、@ Damienが言ったように、なぜデフォルトレベルを気にしないのですか?

10
CodeCaster

以下のようにレジストリを更新して、.NetフレームワークでTLS1.1\TLS1.2を使用できるようにします。再起動が必要です。

私は試しましたが、私のマシンのServicePointManager.SecurityProtocolの値が「Ssl3、Tls」から「Tls、Tls11、Tls12」に変更されました。

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFramework\v4.0.30319]
"SchUseStrongCrypto"=dword:00000001

[HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\.NETFramework\v4.0.30319]
"SchUseStrongCrypto"=dword:00000001 
7
strisunshine