暗号化通信の方式の一つであるSSL通信には、SSL 2.0、SSL 3.0、TLS 1.0、TLS 1.1、TLS 1.2 と、いくつか種類があります。
最近では、TLS 1.2のみ有効にし、SSL 2.0、SSL 3.0、TLS 1.0、TLS 1.1は無効化する傾向にあるようです。
今回は、HttpWebRequest / WebClient 利用時に、TLS 1.2 を有効にする方法をご紹介します。
HttpWebRequest / WebClient 利用時に、TLS 1.2 を有効にする方法
HttpWebRequest クラス や WebClient クラスは、既定の状態では SSL3.0 および TLS1.0 が有効です。
System.Net.ServicePointManager クラスの SecurityProtocol プロパティで TLS1.2 を有効にできます。
※ Internet Explorer の TLS1.1 もしくは 1.2 の設定では、有効にできません。
1 |
ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12; |
なお、 SecurityProtocolType 列挙体は、以下のような値を持っています。
メンバー名 | 説明 |
---|---|
Ssl3 | SSL (Secure Socket Layer) 3.0 セキュリティ プロトコルを示します。 |
Tls | TLS (Transport Layer Security) 1.0 セキュリティ プロトコルを示します。 |
Tls11 | TLS (Transport Layer Security) 1.1 セキュリティ プロトコルを示します。 |
Tls12 | TLS (Transport Layer Security) 1.2 セキュリティ プロトコルを示します。 |
TLS 1.2 を利用するには以下の環境が必要です。
・.NET Framework 4.5 以上 (.NET Framework 4.0 以前では TLS1.0 までしか利用できません)
・Windows 7 および Windows Server 2008 R2 以降
以下のクラスを利用している場合も同様の方法で対応可能です。
・WebRequest
・WebService クラス
・SoapHttpClientProtocol クラス
ソースコードサンプル(C#)WebClient + TLS1.2
1 2 3 4 5 6 7 |
ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12; using (var client = new WebClient()) { var url = "https://www.sample.com/sample"; var keys = new System.Collections.Specialized.NameValueCollection(); var responseData = client.UploadValues(url, keys); } |
参考資料
この記事は、以下を参考にして作られました。元記事を書いていただいた皆さまに感謝いたします。
・.NET Framework で TLS1.1 および 1.2 を有効化する方法
・How do I disable SSL fallback and use only TLS for outbound connections in .NET? (Poodle mitigation)
・Requesting html over https with c# Webclient