Windows XP + .Net Framework で TLS 1.2 を使ってみた
追記した。XP/Vistaでは動作しない件:Ver1.7.4.0リリース - Tween - Twitter Client https://t.co/Q7X5CxYoFz
— きり(ΦωΦ) (@kiri_feather) July 30, 2019
.Net Framework 4.0 で作った Tween が XPでは TLS 1.2 対応できなかったと聞いて追加試験してみました。
試験環境は IE8 で TLS 1.2 が利用可能になってるWindows XPです。
namespace System.Net { public static class SecurityProtocolTypeExtensions { public const SecurityProtocolType Tls12 = (SecurityProtocolType)0x00000C00; public const SecurityProtocolType Tls11 = (SecurityProtocolType)0x00000300; public const SecurityProtocolType SystemDefault = (SecurityProtocolType)0; } } namespace tls12_2 { public partial class MainWindow : Window { public MainWindow() { InitializeComponent(); } private void Button_Click(object sender, RoutedEventArgs e) { ServicePointManager.SecurityProtocol = SecurityProtocolTypeExtensions.Tls11; using (var client = new WebClient()) { var url = "https://security.yahoo.co.jp/news/tls12.html"; var keys = new System.Collections.Specialized.NameValueCollection(); string result; try { var responseData = client.UploadValues(url, keys); result = System.Text.Encoding.UTF8.GetString(responseData); } catch (Exception eee) { result = eee.Message; } text1.Text = result; } } } } |
利用するコードはこんなの
赤字の箇所が Tls11 だとエラーになるので、サイトは Tls 1.2 じゃないと接続できません
まず、 .Net 3.5SP1
普通に動きました
そして、 .Net 4.0
ですが、いきなりクラッシュ
ServicePointManager.SecurityProtocol = SecurityProtocolTypeExtensions.Tls12;
自体受け付けないらしい。
例外をキャッチしたら
The requested securty protocol is not supported.
System.Net.ServicePointManager.ValidateSecurityProtocol でクラッシュしてるので、範囲外の値を受け付けないようだ。
3.5 で動くのに 4.0 で動かないってのもなんか変ですね ・ω・
ちなみに、.Net Framework 4.7のはいってる Windows 7 だと問題ありませんでした。
理由は、 .Net Framework 3.5SP1 はいまだにメンテナンスされてるけど、 .Net Framework 4.0 は 2012 年で新機能の追加は停止されて、現行OSの場合、全て中身が 4.5 や 4.6 や 4.7 や 4.8 に置き換わってしまっているからというのがあります。
Comments