【.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 を無効化されたタイミングでアクセスできなくなってて蒼くなりました。
| 固定リンク
| コメント (0)
| トラックバック (0)