web-dev-qa-db-ja.com

System.Net.SecurityProtocolType.Tls12定義が見つかりません

次のコード行をWebサイトプロジェクトのGlobal.asaxファイルに追加しようとしています。

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

Vs2012 IntelliSenseは、Tls12定義が存在することを示しています。しかし、ビルドは定義が存在しないと言っています(スクリーンショットを参照)。

screen shot

プロジェクトのbinフォルダーにSystem.Net.dllを追加しようとしましたが、ビルドはまだ失敗しました。これを解決するにはどうすればよいですか?

9
HockChai Lim

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)
26
figolu

あなたは.net 4.0を使用していますか?使用するには、4.5以上である必要があります。 Webターゲットフレームワークのバージョンを更新してみてください: 。NET Framework 4.0のTLS 1.2

11
Teoman shipahi

アプリケーション(クライアント)と接続しようとしているサーバーが使用するTLSのバージョンについての懸念について

TLSのRFC 5246標準から直接引用。

  • ClientHelloの間(最初の要求クライアントがサーバーに対して行う)

    クライアントがこのセッション中に通信したいTLSプロトコルのバージョン。これは、クライアントがサポートする最新の(最も価値の高い)バージョンである必要があります(SHOULD)。

  • ServerHello中(サーバーが応答する最初の要求)

    このフィールドには、クライアントhelloでクライアントによって提案された値の低い方と、サーバーでサポートされている最も高い方が含まれます。

ClientHelloServerHelloは、標準で説明されているフィールドを持つ構造体です こちら

TL; DR

System.Net.WebRequestを使用すると、アプリケーションはサーバーとネゴシエートして、アプリケーションとサーバーの両方がサポートする最高のTLSバージョンを決定し、それを使用します。

ご質問について

  • サポートされているTLSプロトコルのバージョンは.NET here で確認できますが、使用している.NETフレームワークのバージョンを確認し、msdnで適切なバージョンに移動してください。
0
kuskmen

TLSおよび接続エラーを回避する方法

  • .NET 4.6以降。 TLS 1.2をサポートするために追加の作業を行う必要はありません。デフォルトでサポートされています。
  • .NET 4.5。 TLS 1.2はサポートされていますが、デフォルトのプロトコルではありません。使用するにはオプトインする必要があります。次のコードはTLS 1.2をデフォルトにします。保護されたリソースへの接続を行う前にそれを実行してください。
    ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;
  • .NET 4.0。 TLS 1.2はサポートされていませんが、システムに.NET 4.5(またはそれ以上)がインストールされている場合、アプリケーションフレームワークがサポートしていない場合でも、TLS 1.2をオプトインできます。唯一の問題は、.NET 4.0のSecurityProtocolTypeにTLS1.2のエントリがないため、この列挙値の数値表現を使用する必要があることです。
    ServicePointManager.SecurityProtocol = (SecurityProtocolType)3072;
  • .NET 3.5以下。 TLS 1.2はサポートされておらず(*)、回避策はありません。アプリケーションをフレームワークの最新バージョンにアップグレードします。

個人的に.Net 4.0 Frameworkで、使用したいくつかのASPクラシックファイルを使用します。

    ServicePointManager.SecurityProtocol = (SecurityProtocolType)(0xc0 | 0x300 | 0xc00);

https://blogs.perficient.com/2016/04/28/tsl-1-2-and-net-support/

0
Crosley33

ウェブサイトはすでに.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>
0
krishna kanth