« 【Windows 10 1803】 設定アプリがようやく使えるものになってきた♪ | トップページ

2018年6月17日 (日)

【.NET / Win8.1 ストアアプリ】 HttpClient で TLS 1.1 / 1.2 に対応するには

SSL / TLS 1.0 に脆弱性が見つかり、 非推奨となったのは、 2015年の春。

PCI DSS v3.1の公開と変更点の概要 | NTTデータ先端技術株式会社
http://www.intellilink.co.jp/article/pcidss/16.html

なので、 それ以降もサポートが継続されているプラットフォームでは TLS 1.1 / 1.2 は使えるようになっているはず (新バージョンはもちろん、 サポート継続中なら旧バージョンでも!) と思い込んでいたのですが… (汗;

実際に、 この記事を書いている時点で、 .NET Framework 4.5 以上では Windows Update により自動的に、 .NET 3.5 では次のようなコードを追加するだけで、 TLS 1.1 / 1.2 でアクセスできるようになります。

// .NET 3.5 以降で TLS 1.1 / 1.2 を有効にする方法
ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls11 | SecurityProtocolType.Tls12;

ところが、 Windows 8.x の Windows Runtime に ServicePointManager はありません。 なので、 Win8.x 向けストアアプリで HttpClient クラス (System.Net.Http.名前空間) とか使っていると、 お手上げ…!?

Win8.x 用ストアアプリは Windows 10 でも動作しますから、 「オワコン、切捨て!」 とはいきません。 さて、 どうしたものでしょう?

その答は、 (なぜかw) Xamarin に関するブログ記事で見つかりました♪

Use TLS 1.2 on a Windows Store App developed with Xamarin – Where is my solution
https://blogs.msdn.microsoft.com/whereismysolution/2017/11/01/605/

Windows.Web.Http 名前空間の HttpClient クラスを使えばいいよ!!」 と。

なんとまぁ、 拍子抜けです。
ただし、 細かい使い勝手は違っています。 例えば、 タイムアウトの設定は、 次のコードのように CancellationToken を使ってやるとか。

using (var client = new Windows.Web.Http.HttpClient())
{
  // タイムアウト設定=15秒
  System.Threading.CancellationTokenSource cts
    = new System.Threading.CancellationTokenSource(15000);

  Windows.Web.Http.HttpResponseMessage response 
    = await client.GetAsync(new Uri(contentUrl)).AsTask(cts.Token);

  if (response.IsSuccessStatusCode)
  {
    // アクセス成功。何かする…
  }
}

ともあれ、 解決策があってヤレヤレです f(^^;
この4月に青空文庫の SSL 対応に対する修正をやったつもりになっていたのですが、 6月初めに TLS 1.0 を無効化されたタイミングでアクセスできなくなってて蒼くなりました。

|

« 【Windows 10 1803】 設定アプリがようやく使えるものになってきた♪ | トップページ

プログラミング」カテゴリの記事

* プログラミング ( Metro スタイル )」カテゴリの記事

コメント

この記事へのコメントは終了しました。

トラックバック


この記事へのトラックバック一覧です: 【.NET / Win8.1 ストアアプリ】 HttpClient で TLS 1.1 / 1.2 に対応するには:

« 【Windows 10 1803】 設定アプリがようやく使えるものになってきた♪ | トップページ