次のコード行をWebサイトプロジェクトのGlobal.asaxファイルに追加しようとしています。
System.Net.ServicePointManager.SecurityProtocol = System.Net.SecurityProtocolType.Tls12;
Vs2012 IntelliSenseは、Tls12定義が存在することを示しています。しかし、ビルドは定義が存在しないと言っています(スクリーンショットを参照)。
プロジェクトのbinフォルダーにSystem.Net.dllを追加しようとしましたが、ビルドはまだ失敗しました。これを解決するにはどうすればよいですか?
SecurityProtocolType.Tls11およびSecurityProtocolType.Tls12列挙値は、Framework 4.0でのみ欠落しています。
SecurityProtocolType数値:
SystemDefault(0)
Ssl3(48-0x30)
Tls(192-0xC0)
Framework 4.0にTls11(768-0x300)がありません
Framework 4.0にTls12(3072-0xC00)がありません
Framework 4.0で、TLS 1.0、1.1、および1.2を許可する場合は、次のように置き換えます。
SecurityProtocolType.Tls | SecurityProtocolType.Tls11 | SecurityProtocolType.Tls12
沿って:
(SecurityProtocolType)(0xc0 | 0x300 | 0xc00)
あなたは.net 4.0を使用していますか?使用するには、4.5以上である必要があります。 Webターゲットフレームワークのバージョンを更新してみてください: 。NET Framework 4.0のTLS 1.2
アプリケーション(クライアント)と接続しようとしているサーバーが使用するTLSのバージョンについての懸念について
TLSのRFC 5246標準から直接引用。
ClientHello
の間(最初の要求クライアントがサーバーに対して行う)
クライアントがこのセッション中に通信したいTLSプロトコルのバージョン。これは、クライアントがサポートする最新の(最も価値の高い)バージョンである必要があります(SHOULD)。
ServerHello
中(サーバーが応答する最初の要求)
このフィールドには、クライアントhelloでクライアントによって提案された値の低い方と、サーバーでサポートされている最も高い方が含まれます。
ClientHello
とServerHello
は、標準で説明されているフィールドを持つ構造体です こちら
TL; DR
System.Net.WebRequest
を使用すると、アプリケーションはサーバーとネゴシエートして、アプリケーションとサーバーの両方がサポートする最高のTLSバージョンを決定し、それを使用します。
ご質問について
TLSおよび接続エラーを回避する方法
ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;
ServicePointManager.SecurityProtocol = (SecurityProtocolType)3072;
個人的に.Net 4.0 Frameworkで、使用したいくつかのASPクラシックファイルを使用します。
ServicePointManager.SecurityProtocol = (SecurityProtocolType)(0xc0 | 0x300 | 0xc00);
https://blogs.perficient.com/2016/04/28/tsl-1-2-and-net-support/
ウェブサイトはすでに.Net 4.5上にあり、後でCompilation> TargetFrameworkを4.0から4.5に手動で更新すると問題が解決しました。
これが更新された設定です
<compilation debug="true" targetFramework="4.5">
<assemblies>
<add Assembly="System.Net.Http, Version=4.0.0.0, Culture=neutral, PublicKeyToken=B03F5F7F11D50A3A"/>
<add Assembly="System.Net, Version=4.0.0.0, Culture=neutral, PublicKeyToken=B03F5F7F11D50A3A"/>
</assemblies>
</compilation>