frameworkアプリ)でhttps(TLS1.1/TLS1.2)通信をするWPFアプリでhttp/httpsの通信をしてデータを取得するには、通常はSystem.Net名前空間のクラスを使います。http通信(非暗号通信)は普通に通信できます。frameworkのバージョンによっては、そのままでは通信に失敗します。frameworkアプリにおけるhttps通信に関する実装についての投稿です。frameworkアプリでhttp/https通信する場合は、System.Net名前空間にあるWebClientクラスWebRequestクラス/WebResponseクラス上記のクラスの派生クラスを使います。WebClientクラスを使って、UTF8の文字列データを取得する場合は、以下のような関数で実現できます。ReadFromUrlAsync("http://example.com/utf8.txt");のように文字列データを取得できます。ようにプロトコルをhttp(非暗号化通信)からhttps(暗号化通信)に変更するとサーバーの設定によっては、例外が発生します。result)のような内容です。通信チャネルの作成に失敗しています。TLS1.2のプロトコルのみを受け付けるようになっていると発生します。frameworkのバージョンに依存します。値を利用可能となっています。注意してほしいのは、これは、実際に暗号化通信できるかどうかではなく、設定としてプロパティにTLS1.1/1.2プロトコルを指定できるかどうかということです。通信時に使う暗号化プロトコルとしてTLS1.1/1.2を指定した時に、実際にTLS1.1/1.2で暗号化通信ができるかどうかは、Windowsのバージョンに依存します。10のようになっています。アプリ側の実行環境だけでなく、通信相手のサーバーがTLS1.1/1.2を使うことができる設定になっている必要があります。SystemDefaultとなっています。Updateの内容によっては変わる可能性があります。値として複数のプロトコルが設定されています。複数のプロトコルが指定されている場合は、サーバー側で利用できるプロトコルを考慮して、暗号化強度が一番高いものが利用されます。4.7では、個別のプロトコル値ではなく、SystemDefaultという値がデフォルト値となっています。このSystemDefaultが設定されている場合は、実際のプロトコルの値は、Windowsのシステム設定に依存します。特別な設定変更をしていない場合は、以下のようになっています。TLS1.2詳細は、英語になりますがマイクロソフトの以下のサイトにあります。1.1/1.2が含まれていません。frameworkアプリ)は、そのままでは、TLS1.1/1.2を使った暗号化通信ができないのです。TLS1.0を無効化して、TLS1.1/1.2しか有効化していないサーバーと暗号化通信をしようとすると失敗します。このとき、冒頭に記したSystem.Net.WebExceptionの例外が発生します。暗号化通信に利用するプロトコルを設定すればよいのです。具体的には、System.Net名前空間にあるServicePointManager.SecurityProtocolのプロパティに設定します。このプロパティは静的(staticな)プロパティであるので、設定するとそのプロセス内のすべてのhttps通信に反映されます。4.5以降の場合は、Tls11/Tls12がSecurityProtocolTypeの列挙値として定義されているので、以下のように設定できます。SecurityProtocolType.Tls12;この設定をした後のhttps通信(暗号化通信)では、TLS1.0/1.1/1.2のみが利用可能となります。4.0以前の場合は、Tls11/Tls12がSecurityProtocolTypeの列挙値として定義されていません。そのためそのままでは設定できません。以下のように拡張した列挙値(SecurityProtocolTypeExtensions)を用意します。}}そして、定義した値を使用してプロパティを設定します。プロパティ値を設定するところでは、必要なKBが当たっていないときに例外が発生することを考慮して、以下のようにして、設定します。SecurityProtocolType.Tls;}この例では、TLS1.0/1.1/1.2を設定しています。KBが当たていない環境などで例外が発生した時は、SSL3/TLS1.0を設定しています。4.5および以前を利用するアプリでもTLS1.1/1.2を使った暗号化通信ができます。