Windows XP + .Net Framework で TLS 1.2 を使ってみた

.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
tls12
普通に動きました

そして、 .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 に置き換わってしまっているからというのがあります。

おすすめ

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です