現在、私は問題を抱えており、厳密な答えを見つけることができません。
4.6.1フレームワークをターゲットとするASP.NET MVC 5アプリケーションがあり、その目標は、TLS 1.1/TLS 1.2プロトコルによって保護されているサードパーティのAPIと連携することです。
私は2つの環境でアプリケーションを実行しようとしました:
問題は、ローカルで起動するとServicePointManager.SecurityProtocol
のデフォルト値がSsl3, Tls
に設定されるため、APIをターゲットにできず、TLS 1.1/TLS 1.2を使用するためにアプリケーションの起動時にコーディングする必要があります:ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls11 | SecurityProtocolType.Tls12
。
サーバーでアプリケーションを実行すると、デフォルト値ServicePointManager.SecurityProtocol
がTls, Tls11, Tls12
に設定されるため、適切に機能します。
ドキュメントによると、.NET Framework 4.6以降のバージョンで実行されるアプリケーションは、デフォルトでTLS 1.1/TLS 1.2を使用する必要があります。
ServicePointManager.SecurityProtocol
のデフォルト値が異なるのはなぜですか? .NET Frameworkの構成が原因ですか?それともレジストリ設定?調べてみましたが、答えが見つかりませんでした。
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が言ったように、なぜデフォルトレベルを気にしないのですか?
以下のようにレジストリを更新して、.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