みなさん、こんにちは。
.NET Framework での TLS 1.1 および 1.2 対応について、以前 .NET Framework で TLS1.1 および 1.2 を有効化する方法 という記事を投稿しています。
しかしながら、記載の内容がわかりづらいこと、また、記事の公開以降に Update できていなかった点があるため、まとめとして本記事を作成しました。
今後のご対応の一助となれましたら大変うれしく思います。
はじめに
本資料は下記の構成でまとめています。
- TLS 1.1 および 1.2 に対応するうえでの考え方
- Windows OS の TLS 1.1 および 1.2 への対応状況
- .NET Framework で利用される既定のプロトコル バージョン
- .NET Framework 3.5 で TLS 1.1 および 1.2 を利用できるようにするための更新プログラム
- .NET Framework 3.5 で TLS 1.1 および 1.2 を既定値にするための方法
- .NET Framework 4.5.2 で TLS 1.1 および 1.2 を既定値にするための方法
- .NET Framework のサポート状況
- 各 OS ごとの対応方法
また、本資料と併せて下記の資料もご参考ください。
1. TLS 1.1 および 1.2 に対応するうえでの考え方
ご利用の 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 への対応状況
.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
.NET Framework での TLS 1.1 および 1.2 への対応の前に、事前に下記の更新プログラムを適用し、OS として TLS 1.1 および 1.2 を利用できるようにする必要があります。
更新プログラム適用後、必要に応じて上記資料に記載のレジストリ値を設定します。
キー: | HKEY_LOCAL_MACHINESYSTEMCurrentControlSetControlSecurityProvidersSCHANNELProtocolsTLS 1.1Client |
---|---|
名前: | DisabledByDefault |
種類: | REG_DWORD |
値: | 0 |
キー: | HKEY_LOCAL_MACHINESYSTEMCurrentControlSetControlSecurityProvidersSCHANNELProtocolsTLS 1.2Client |
---|---|
名前: | DisabledByDefault |
種類: | REG_DWORD |
値: | 0 |
キー: | HKEY_LOCAL_MACHINESYSTEMCurrentControlSetControlSecurityProvidersSCHANNELProtocolsTLS 1.1Server |
---|---|
名前: | DisabledByDefault |
種類: | REG_DWORD |
値: | 0 |
キー: | HKEY_LOCAL_MACHINESYSTEMCurrentControlSetControlSecurityProvidersSCHANNELProtocolsTLS 1.2Server |
---|---|
名前: | DisabledByDefault |
種類: | REG_DWORD |
値: | 0 |
設定のポイント
クライアント OS として利用する場合 (任意のアプリケーションが別の Web サーバーに接続するような場合) には Client に設定します。
サーバー OS として利用する場合 (Web サーバーのように接続を待ち受けるような場合) には Server に設定します。
Windows Server 2008 R2 / Windows 7
アプリケーション側からの指定がなくとも利用されるように構成するには、上記の Windows Server 2008 SP2 に記載したレジストリ値 (DisabledByDefault) を必要に応じて設定します。
(参考) TLS/SSL Settings
Windows Server 2012 / Windows 8.1 以降
追加で必要な設定はありません。
3. .NET Framework で利用される既定のプロトコル バージョン
プログラム上で明示的に指定されている場合は指定されたプロトコル バージョンが利用されますが、指定されていない場合に利用される既定のプロトコル バージョンは下記のとおりです。
.NET Framework の各バージョンごとに、TLS 1.1 および 1.2 への対応状況と併せてまとめました。
.NET Framework 3.5 (3.5.1)
プロパティの既定値は SSL 3.0 および TLS 1.0
.NET Framework 4.5.2
プロパティの既定値は SSL 3.0 および TLS 1.0
.NET Framework 4.6.x
プロパティの既定値は TLS 1.0、1.1 および 1.2
.NET Framework 4.7.x
プロパティの既定値は SystemDefault となり、OS の TLS の設定状態に依存する
4. .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 2008
Windows Server 2008 R2 / Windows 7
Windows Server 2012
Windows Server 2012 R2 / Windows 8.1
※ 更新プログラムの適用には Windows 8.1 Update / Windows Server 2012 R2 Update (KB2919355) が事前に適用されている必要があります
Windows 10 v1507 (LTSC)
※ 本記事執筆時点で、最も古い更新プログラムは下記の 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 以降
追加で適用が必要な更新プログラムはありません。
5. .NET Framework 3.5 で TLS 1.1 および 1.2 を既定値にするための方法
既定値を変更するには、Windows OS 側で TLS 1.1 および 1.2 が利用されるよう構成し、かつ、.NET Framework 3.5 で TLS 1.1 および 1.2 を利用できるようにするための更新プログラムを適用したうえで各資料に記載の下記のレジストリ値を設定します。
Windows OS 側で TLS 1.1 および 1.2 が利用されるよう構成することで、.NET Framework 3.5 で利用されるプロトコル バージョンも TLS 1.0、TLS 1.1 および TLS 1.2 に変更されます。
キー: | HKEY_LOCAL_MACHINESOFTWARE[Wow6432Node]Microsoft.NETFrameworkv2.0.50727 ※ 64 ビット OS 環境の場合は Wow6432Node にも設定します |
---|---|
名前: | SystemDefaultTlsVersions |
種類: | REG_DWORD |
値: | 1 |
設定のポイント
プログラム上で ServicePointManager.SecurityProtocol プロパティに明示的に任意のプロトコル バージョンを指定している場合は、上記のレジストリ値の設定の有無にかかわらずプログラムで指定したプロトコル バージョンが利用されます。
6. .NET Framework 4.5.2 で TLS 1.1 および 1.2 を既定値にするための方法
既定値を変更するには、下記のセキュリティ アドバイザリー 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_MACHINESOFTWARE[Wow6432Node]Microsoft.NETFrameworkv4.0.30319 ※ 64 ビット OS 環境の場合は Wow6432Node にも設定します |
---|---|
名前: | SchUseStrongCrypto |
種類: | REG_DWORD |
値: | 1 |
設定のポイント
プログラム上で ServicePointManager.SecurityProtocol プロパティに明示的に任意のプロトコル バージョンを指定している場合は、上記のレジストリ値の設定の有無にかかわらずプログラムで指定したプロトコル バージョンが利用されます。
7. .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 ごとの対応方法
なお、.NET Framework 3.5(.1) は、事前に TLS 1.1 および TLS 1.2 に対応するための更新プログラムが適用されていることが前提 です。
また、Windows Server 2008 は、事前に OS 向けの TLS 1.1 および 1.2 に対応するための更新プログラムが適用されていることが前提 です。
各 OS 共通
下表は当プロパティに 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 |
設定の変更必要なし |
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 が必要 |
本記事が今後のご対応のお役に立てますと幸いです。