.NET Framework で TLS1.1 および 1.2 を有効化する方法 -まとめ-


みなさん、こんにちは。

.NET Framework での TLS 1.1 および 1.2 対応について、以前 .NET Framework で TLS1.1 および 1.2 を有効化する方法 という記事を投稿しています。
しかしながら、記載の内容がわかりづらいこと、また、記事の公開以降に Update できていなかった点があるため、まとめとして本記事を作成しました。
今後のご対応の一助となれましたら大変うれしく思います。

1. TLS 1.1 および 1.2 に対応するうえでの考え方

.NET Framework で作成されたアプリケーションを TLS 1.2 (TLS 1.1) に対応させるには下記の点を考慮する必要があります。
ご利用の OS が TLS 1.1 および 1.2 を利用できるかどうか、また、アプリケーションで独自に設定しているかどうか、により必要な対応が異なります。
このため、まずは下記の観点で、ご利用対象の環境やアプリケーションについて理解することが第一歩となります。

  • 対象の環境は OS として TLS 1.2 (TLS 1.1) を利用できるかどうか
  • アプリケーション側で ServicePointManager.SecurityProtocol プロパティにすでに明示的に設定しているものがないか
  • アプリケーションがターゲットしている .NET Framework のバージョンはいくつか
  • 稼働対象の環境にインストールされている .NET Framework のバージョンはいくつか
  • アプリケーションを改修することはできるか

各ポイントの詳細については次項以降をご覧ください。

2. Windows OS の TLS 1.1 および 1.2 への対応状況

ご利用対象の Windows OS 自体が TLS 1.1 および 1.2 を利用することができない場合には、.NET Framework 側でいくら対応しても TLS 1.1 および 1.2 に対応することはできません。
.NET Framework での対応の前に、Windows OS 自体を TLS 1.1 および 1.2 を利用できるように構成する必要があります
!ご注意ください!

Windows OS 自体が TLS 1.1 および 1.2 を利用することができない状態でアプリケーション側で TLS 1.1 および 1.2 が指定されると、アプリケーション実行時に例外が発生します。

Windows Server 2008 SP2

既定の状態では OS として TLS 1.1 および 1.2 を利用することができません
.NET Framework での TLS 1.1 および 1.2 への対応の前に、事前に下記の更新プログラムを適用し、OS として TLS 1.1 および 1.2 を利用できるようにする必要があります。

更新プログラム適用後、必要に応じて上記資料に記載のレジストリ値を設定します。

キー: HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.1\Client
名前: DisabledByDefault
種類: REG_DWORD
値: 0
キー: HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.2\Client
名前: DisabledByDefault
種類: REG_DWORD
値: 0
キー: HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.1\Server
名前: DisabledByDefault
種類: REG_DWORD
値: 0
キー: HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.2\Server
名前: DisabledByDefault
種類: REG_DWORD
値: 0
設定のポイント

クライアント OS として利用する場合 (任意のアプリケーションが別の Web サーバーに接続するような場合) には Client に設定します。
サーバー OS として利用する場合 (Web サーバーのように接続を待ち受けるような場合) には Server に設定します。

Windows Server 2008 R2 / Windows 7

OS としては TLS 1.1 および 1.2 を利用できますが、アプリケーション側より明示的に TLS 1.1 もしくは 1.2 を利用する指定がない限り利用されません。
アプリケーション側からの指定がなくとも利用されるように構成するには、上記の Windows Server 2008 SP2 に記載したレジストリ値 (DisabledByDefault) を必要に応じて設定します。
(参考) TLS/SSL Settings

Windows Server 2012 / Windows 8.1 以降

OS として TLS 1.1 および 1.2 を利用でき、かつ、既定の状態で TLS 1.1 および 1.2 が利用されるように構成されています。
追加で必要な設定はありません。

3. .NET Framework で利用される既定のプロトコル バージョン

.NET Framework では、HttpWebRequest クラスなどを利用した通信において ServicePointManager.SecurityProtocol プロパティに指定されたプロトコル バージョンが利用されます。
プログラム上で明示的に指定されている場合は指定されたプロトコル バージョンが利用されますが、指定されていない場合に利用される既定のプロトコル バージョンは下記のとおりです。
.NET Framework の各バージョンごとに、TLS 1.1 および 1.2 への対応状況と併せてまとめました。

.NET Framework 3.5 (3.5.1)

既定では TLS 1.1 および 1.2 は未対応
プロパティの既定値は SSL 3.0 および TLS 1.0

.NET Framework 4.5.2

TLS 1.1 / TLS 1.2 に対応済み
プロパティの既定値は SSL 3.0 および TLS 1.0

.NET Framework 4.6.x

TLS 1.1 / TLS 1.2 に対応済み
プロパティの既定値は TLS 1.0、1.1 および 1.2

.NET Framework 4.7.x

TLS 1.1 / TLS 1.2 に対応済み
プロパティの既定値は SystemDefault となり、OS の TLS の設定状態に依存する

4. .NET Framework 3.5 で TLS 1.1 および 1.2 を利用できるようにするための更新プログラム

.NET Framework 3.5 は既定の状態では TLS 1.1 および 1.2 を利用することができません。
.NET Framework 3.5 で TLS 1.1 および 1.2 を利用できるようにするために下記の更新プログラムを適用する必要があります。
もしくは、Windows 10 および Windows Server 2016 の場合は OS 向けの最新のロールアップを、それ以外の OS では .NET Framework 向けの最新の品質ロールアップを適用します。
!ご注意ください!

更新プログラムを適用しない状態でアプリケーション側で TLS 1.1 および 1.2 が指定されると、アプリケーション実行時に例外が発生します。

Windows Server 2012 R2 / Windows 8.1

Support for TLS System Default Versions included in the .NET Framework 3.5 on Windows 8.1 and Windows Server 2012 R2
※ 更新プログラムの適用には Windows 8.1 Update / Windows Server 2012 R2 Update (KB2919355) が事前に適用されている必要があります

Windows 10 v1507 (LTSC)

Windows 10 v1507 環境向けに公開されている更新プログラムを適用します。
※ 本記事執筆時点で、最も古い更新プログラムは下記の 2016 年 10 月に公開された更新プログラムです。下記以降の更新プログラムの適用をご検討ください。
2016 年 10 月 11 日 — KB3192440 (OS ビルド 10240.17146)

Windows 10 v1607 (LTSC) / Windows Server 2016

下記のいずれかの更新プログラム以降で対応されています。
2016 年 12 月 9 日 — KB3201845 (OS ビルド 14393.479)
2016 年 12 月 13 日 — KB3206632 (OS ビルド 14393.576)

Windows 10 v1703 以降

.NET Framework 3.5 の機能を有効化した時点ですでに対応されています。
追加で適用が必要な更新プログラムはありません。

5. .NET Framework 3.5 で TLS 1.1 および 1.2 を既定値にするための方法

.NET Framework 3.5 は、SSL 3.0 および TLS 1.0 が既定で利用されるプロトコル バージョンです。
既定値を変更するには、Windows OS 側で TLS 1.1 および 1.2 が利用されるよう構成し、かつ、.NET Framework 3.5 で TLS 1.1 および 1.2 を利用できるようにするための更新プログラムを適用したうえで各資料に記載の下記のレジストリ値を設定します。
下記のレジストリ値が設定されると Windows OS 側で構成しているプロトコル バージョンに従うようになります。
Windows OS 側で TLS 1.1 および 1.2 が利用されるよう構成することで、.NET Framework 3.5 で利用されるプロトコル バージョンも TLS 1.0、TLS 1.1 および TLS 1.2 に変更されます。
キー: HKEY_LOCAL_MACHINE\SOFTWARE\[Wow6432Node\]Microsoft\.NETFramework\v2.0.50727
※ 64 ビット OS 環境の場合は Wow6432Node にも設定します
名前: SystemDefaultTlsVersions
種類: REG_DWORD
値: 1
設定のポイント

プログラム上で ServicePointManager.SecurityProtocol プロパティに明示的に任意のプロトコル バージョンを指定している場合は、上記のレジストリ値の設定の有無にかかわらずプログラムで指定したプロトコル バージョンが利用されます。

6. .NET Framework 4.5.2 で TLS 1.1 および 1.2 を既定値にするための方法

.NET Framework 4.5.2 は、SSL 3.0 および TLS 1.0 が既定で利用されるプロトコル バージョンです。
既定値を変更するには、下記のセキュリティ アドバイザリー 2960358 で公開されている更新プログラムを適用します。
もしくは、Windows 10 および Windows Server 2016 の場合は OS 向けの最新のロールアップを、それ以外の OS では .NET Framework 向けの最新の品質ロールアップを適用します。

上記のセキュリティ アドバイザリーを適用すると下記のレジストリ値が構成され、.NET Framework 4.5.2 で利用されるプロトコル バージョンが TLS 1.0、TLS 1.1 および TLS 1.2 に変更されます。
念のためレジストリ値が構成されているか確認し、万が一構成されていない場合は手動で構成します。

キー: HKEY_LOCAL_MACHINE\SOFTWARE\[Wow6432Node\]Microsoft\.NETFramework\v4.0.30319
※ 64 ビット OS 環境の場合は Wow6432Node にも設定します
名前: SchUseStrongCrypto
種類: REG_DWORD
値: 1
設定のポイント

プログラム上で ServicePointManager.SecurityProtocol プロパティに明示的に任意のプロトコル バージョンを指定している場合は、上記のレジストリ値の設定の有無にかかわらずプログラムで指定したプロトコル バージョンが利用されます。

7. .NET Framework のサポート状況

.NET Framework 4.x 系は、4.5.2 以降がサポート対象です。
稼働対象の環境にインストールするバージョンは可能な限り最新のバージョンとすることをご検討ください。

各 OS 上での .NET Framework の既定のバージョン

OS ごとに既定でインストールされている .NET Framework のバージョンは下記の資料をご覧ください。
OS によってはクリーンインストールした状態ですでにサポートが終了している状況もあり得るため、インストールすることのできる最新バージョンへの更新をご検討ください。

各 OS 上でサポートされるバージョン

各 OS ごとにサポートされているバージョンは下表のとおりです。

.NET Framework のバージョン
3.5(.1) 4.0.0 4.5.0 4.5.1 4.5.2 4.6.0 4.6.1 4.6.2 4.7.0 4.7.1 4.7.2
Windows Server 2008
Windows Server 2008 R2
Windows 7
Windows Server 2012
Windows Server 2012 R2
Windows 8.1
Windows 10 v1507 (LTSC 2015)
Windows 10 v1607 (LTSC 2016)
Windows Server 2016
Windows 10 v1703
Windows 10 v1709
Windows 10 v1803
 OS クリーンインストール時の既定のバージョン
 追加でインストールすることのできるバージョン
 役割と機能の追加より有効化できるバージョン

8. 各 OS ごとの対応方法

上記までの内容を踏まえたうえでの各 OS ごとの対応方法について下記にまとめました。
なお、.NET Framework 3.5(.1) は、事前に TLS 1.1 および TLS 1.2 に対応するための更新プログラムが適用されていることが前提 です。
また、Windows Server 2008 は、事前に OS 向けの TLS 1.1 および 1.2 に対応するための更新プログラムが適用されていることが前提 です。

各 OS 共通

何度も記載していますが、ServicePointManager.SecurityProtocol プロパティに明示的にプロトコル バージョンを指定している場合には、当プロパティに指定したプロトコル バージョンが利用されます。
下表は当プロパティに TLS 1.2 を設定した場合の対応表になります。
アプリケーションがターゲットしているバージョン
クライアント環境 3.5(.1) 4.0.0 4.5.0 4.5.1 4.5.2 4.6.0 4.6.1 4.6.2 4.7.0 4.7.1 4.7.2
3.5(.1)
4.5.2
4.6.0
4.6.1
4.6.2
4.7.0
4.7.1
4.7.2
 設定の変更必要なし
ServicePointManager.SecurityProtocol プロパティに明示的に指定していない場合の各 OS ごとの対応表は下記のとおりです。

Windows Server 2008

※ 前提条件 ※
Windows Server 2008 は、既定の状態では OS として TLS 1.1 および 1.2 を利用することができません。
事前に TLS 1.1 および 1.2 を利用できるようにするための更新プログラムの適用が必須 です。
アプリケーションがターゲットしているバージョン
クライアント環境 3.5(.1) 4.0.0 4.5.0 4.5.1 4.5.2 4.6.0 4.6.1 4.6.2 4.7.0 4.7.1 4.7.2
3.5(.1)
4.5.2
4.6.0
 設定の変更必要なし
 .NET Framework 3.5 用のレジストリ値 SystemDefaultTlsVersions が必要
 .NET Framework 4.5 用のレジストリ値 SchUseStrongCrypto が必要

Windows Server 2008 R2 / Windows 7

※ 前提条件 ※
Windows Server 2008 R2 / Windows 7 は OS としては TLS 1.1 および 1.2 を利用できますが、アプリケーション側より明示的に TLS 1.1 もしくは 1.2 を利用する指定がない限り利用されません。
必要に応じてアプリケーション側からの指定がなくとも TLS 1.1 および 1.2 が利用されるためのレジストリ値を設定します
アプリケーションがターゲットしているバージョン
クライアント環境 3.5(.1) 4.0.0 4.5.0 4.5.1 4.5.2 4.6.0 4.6.1 4.6.2 4.7.0 4.7.1 4.7.2
3.5(.1)
4.5.2
4.6.0
4.6.1
4.6.2
4.7.0
4.7.1
4.7.2
 設定の変更必要なし
 .NET Framework 3.5 用のレジストリ値 SystemDefaultTlsVersions が必要
 .NET Framework 4.5 用のレジストリ値 SchUseStrongCrypto が必要
 Windows OS 側で TLS 1.1 および 1.2 が利用されるための設定が必要

Windows Server 2012

アプリケーションがターゲットしているバージョン
クライアント環境 3.5(.1) 4.0.0 4.5.0 4.5.1 4.5.2 4.6.0 4.6.1 4.6.2 4.7.0 4.7.1 4.7.2
3.5(.1)
4.5.2
4.6.0
4.6.1
4.6.2
4.7.0
4.7.1
4.7.2
 設定の変更必要なし
 .NET Framework 3.5 用のレジストリ値 SystemDefaultTlsVersions が必要
 .NET Framework 4.5 用のレジストリ値 SchUseStrongCrypto が必要

Windows Server 2012 R2 / Windows 8.1

アプリケーションがターゲットしているバージョン
クライアント環境 3.5(.1) 4.0.0 4.5.0 4.5.1 4.5.2 4.6.0 4.6.1 4.6.2 4.7.0 4.7.1 4.7.2
3.5(.1)
4.5.2
4.6.0
4.6.1
4.6.2
4.7.0
4.7.1
4.7.2
 設定の変更必要なし
 .NET Framework 3.5 用のレジストリ値 SystemDefaultTlsVersions が必要
 .NET Framework 4.5 用のレジストリ値 SchUseStrongCrypto が必要

Windows 10 v1507 (LTSC 2015)

アプリケーションがターゲットしているバージョン
クライアント環境 3.5(.1) 4.0.0 4.5.0 4.5.1 4.5.2 4.6.0 4.6.1 4.6.2 4.7.0 4.7.1 4.7.2
3.5(.1)
4.6.0
4.6.1
4.6.2
4.7.0
4.7.1
4.7.2
 設定の変更必要なし
 .NET Framework 3.5 用のレジストリ値 SystemDefaultTlsVersions が必要
 .NET Framework 4.5 用のレジストリ値 SchUseStrongCrypto が必要

Windows 10 v1607 (LTSC 2016) / Windows Server 2016

アプリケーションがターゲットしているバージョン
クライアント環境 3.5(.1) 4.0.0 4.5.0 4.5.1 4.5.2 4.6.0 4.6.1 4.6.2 4.7.0 4.7.1 4.7.2
3.5(.1)
4.6.2
4.7.0
4.7.1
4.7.2
 設定の変更必要なし
 .NET Framework 3.5 用のレジストリ値 SystemDefaultTlsVersions が必要
 .NET Framework 4.5 用のレジストリ値 SchUseStrongCrypto が必要

Windows 10 v1703

アプリケーションがターゲットしているバージョン
クライアント環境 3.5(.1) 4.0.0 4.5.0 4.5.1 4.5.2 4.6.0 4.6.1 4.6.2 4.7.0 4.7.1 4.7.2
3.5(.1)
4.7.0
4.7.1
4.7.2
 設定の変更必要なし
 .NET Framework 3.5 用のレジストリ値 SystemDefaultTlsVersions が必要
 .NET Framework 4.5 用のレジストリ値 SchUseStrongCrypto が必要

Windows 10 v1709

アプリケーションがターゲットしているバージョン
クライアント環境 3.5(.1) 4.0.0 4.5.0 4.5.1 4.5.2 4.6.0 4.6.1 4.6.2 4.7.0 4.7.1 4.7.2
3.5(.1)
4.7.1
4.7.2
 設定の変更必要なし
 .NET Framework 3.5 用のレジストリ値 SystemDefaultTlsVersions が必要
 .NET Framework 4.5 用のレジストリ値 SchUseStrongCrypto が必要

Windows 10 v1803

アプリケーションがターゲットしているバージョン
クライアント環境 3.5(.1) 4.0.0 4.5.0 4.5.1 4.5.2 4.6.0 4.6.1 4.6.2 4.7.0 4.7.1 4.7.2
3.5(.1)
4.7.2
 設定の変更必要なし
 .NET Framework 3.5 用のレジストリ値 SystemDefaultTlsVersions が必要
 .NET Framework 4.5 用のレジストリ値 SchUseStrongCrypto が必要
いかがでしょうか。
本記事が今後のご対応のお役に立てますと幸いです。

Comments (0)

Skip to main content