このドキュメントでは、Microsoft オペレーティング システムに基づいて構築されたソフトウェアのトランスポート層セキュリティ (TLS) プロトコル バージョン 1.0 の依存関係を迅速に特定して削除する方法に関する最新のガイダンスを示します。その後、お客様とオンライン サービスを保護するために Microsoft によって提供される製品の変更と新機能の詳細が記載されています。 これは、TLS 1.2 以降のネットワーク環境への移行計画を構築するための開始点として使用することを目的としています。 ここで説明するソリューションは引き継がれ、Microsoft 以外のオペレーティング システムまたは暗号化ライブラリでの TLS 1.0 の使用を削除するのに役立ちますが、このドキュメントの焦点ではありません。
TLS 1.0 は、コンピューター ネットワーク経由で暗号化チャネルを確立するために 1999 年に最初に定義されたセキュリティ プロトコルです。 Microsoft は、Windows XP/Server 2003 以降、このプロトコルをサポートしています。 最新の OS で使用されている既定のセキュリティ プロトコルではなくなりましたが、下位互換性のために TLS 1.0 は引き続きサポートされています。 TLS 1.0 の規制要件の進化と新しいセキュリティの脆弱性により、企業は TLS 1.0 を完全に無効にするインセンティブが提供されます。
Microsoft では、お客様の環境で TLS 1.0 の依存関係を削除し、可能な限りオペレーティング システム レベルで TLS 1.0 を無効にすることで、この問題を先取りすることをお勧めします。 TLS 1.0 がソフトウェア業界でサポートされている期間が長い場合、TLS 1.0 の非推奨計画には次のものが含まれることを強くお勧めします。
TLS 1.0 以前のセキュリティ プロトコルのハードコーディングされたインスタンスを検索/修正するためのコード分析。
TLS 1.0 以前のプロトコルを使用してオペレーティング システムを識別するためのネットワーク エンドポイントのスキャンとトラフィック分析。
TLS 1.0 が無効になっているアプリケーション スタック全体を通じた完全回帰テスト。
既定で TLS 1.2 をネゴシエートできるバージョンへのレガシ オペレーティング システムと開発ライブラリ/フレームワークの移行。
TLS 1.2 サポートの問題を特定するためにビジネスで使用されるオペレーティング システム間の互換性テスト。
TLS 1.0 の廃止への移行を通知するために、独自のビジネス パートナーや顧客と連携します。
TLS 1.0 が無効になると、サーバーに接続できなくなる可能性があるクライアントについて理解します。
このドキュメントの目的は、TLS 1.0 を無効にするための技術的な阻害要因を取り除き、同時に、この変更が自分の顧客に与える影響の可視性を高めるのに役立つ推奨事項を提供することです。 このような調査を完了すると、TLS 1.0 の次のセキュリティ脆弱性によるビジネスへの影響を軽減できます。 このドキュメントの目的上、TLS 1.0 の非推奨への参照には TLS 1.1 も含まれています。
エンタープライズ ソフトウェア開発者は、将来のセキュリティ プロトコルの侵害に対処するために、より安全でアジャイルなソリューション (暗号化機敏性とも呼ばれます) を採用する戦略的なニーズがあります。 このドキュメントでは、TLS ハードコーディングを排除するためのアジャイル ソリューションを提案していますが、より広範な Crypto Agility ソリューションは、このドキュメントの範囲外です。
Microsoft の TLS 1.0 実装の現在の状態
Microsoft の TLS 1.0 の実装 には、既知のセキュリティ脆弱性が存在しません。 将来の プロトコル ダウングレード攻撃 やその他の TLS 1.0 の脆弱性が Microsoft の実装に固有ではない可能性があるため、TLS 1.2 より古いすべてのセキュリティ プロトコルへの依存関係を可能な限り削除することをお勧めします (TLS 1.1/1.0/SSLv3/SSLv2)。
TLS 1.2 以降へのこの移行を計画する場合、開発者とシステム管理者は、従業員とパートナーによって開発されたアプリケーションでプロトコル バージョンのハードコーディングを行う可能性があることを認識する必要があります。 ここでのハードコーディングは、TLS バージョンが古く、新しいバージョンよりも安全性が低いバージョンに固定されていることを意味します。 ハードコーディングされたバージョンより新しい TLS バージョンは、問題のプログラムを変更しないと使用できません。 このクラスの問題は、ソース コードの変更とソフトウェア更新プログラムの展開なしでは対処できません。 プロトコル バージョンのハードコーディングは、多くの異なるブラウザーとオペレーティング システムがさまざまなレベルの TLS サポートを持っていたため、テストとサポートの目的で以前は一般的でした。
Windows でサポートされている TLS のバージョン
多くのオペレーティング システムには、古い TLS バージョンの既定値や、考慮する必要があるサポートの上限があります。
図 1: OS バージョン別のセキュリティ プロトコルのサポート
| Windowsオペレーティングシステム | SSLv2 | SSLv3 | TLS 1.0 | TLS 1.1 | TLS 1.2 | TLS 1.3 |
|---|---|---|---|---|---|---|
| Windows Vista | 有効 | 有効 | 有効 | サポートされていません | サポートされていません | サポートされていません |
| Windows Server 2008 | 有効 | 有効 | 有効 | 無効* | 無効* | サポートされていません |
| Windows 7 (WS2008 R2) | 有効 | 有効 | 有効 | 無効* | 無効* | サポートされていません |
| Windows 8 (WS2012) | Disabled | 有効 | 有効 | 有効 | 有効 | サポートされていません |
| Windows 8.1 (WS2012 R2) | Disabled | 有効 | 有効 | 有効 | 有効 | サポートされていません |
| ウィンドウズ10 | Disabled | 有効 | 有効 | 有効 | 有効 | サポートされていません |
| ウィンドウズ11 | Disabled | 有効 | 有効 | 有効 | 有効 | 有効 |
| Windows Server 2016 | サポートされていません | Disabled | 有効 | 有効 | 有効 | サポートされていません |
| Windows Server 2016 | サポートされていません | Disabled | 有効 | 有効 | 有効 | サポートされていません |
| Windows Server 2019 | サポートされていません | Disabled | 有効 | 有効 | 有効 | サポートされていません |
| Windows Server 2019 GS エディション | サポートされていません | Disabled | Disabled | Disabled | 有効 | サポートされていません |
| Windows Server 2022 | サポートされていません | Disabled | Disabled | Disabled | 有効 | 有効 |
Windows Server 2019 GS エディションは Microsoft SDL に準拠しています。TLS 1.2 は、制限付きの暗号スイートのセットのみを使用します。
Windows Server 2022 エディションは、Microsoft SDL に準拠しており、TLS 1.2 および TLS 1.3 は、制限付きの暗号スイートのセットでのみ使用されます。
このオプションの Windows Update パッケージを使用して、Windows Server 2008 で TLS 1.1/1.2 を有効にすることができます。
IE/Edge での TLS 1.0/1.1 の非推奨の詳細については、「Microsoft Edge および Internet Explorer 11 での TLS 接続の最新化、Microsoft Edge に対するサイトの互換性に影響する変更、および新しい Edge ブラウザーでの TLS/1.0 および TLS/1.1 の無効化」を参照してください。
オンライン サービスに接続するときにさまざまなクライアントが要求する TLS バージョンを簡単に判断する方法は、 Qualys SSL Labs のハンドシェイク シミュレーションを参照することです。 このシミュレーションでは、製造元間のクライアント OS/ブラウザーの組み合わせについて説明します。 www.microsoft.comに接続するときに、さまざまなシミュレートされたクライアント OS/ブラウザーの組み合わせによってネゴシエートされる TLS プロトコル のバージョンを示す詳細な例については、このドキュメントの最後にある付録 A を参照してください。
まだ完了していない場合は、企業、顧客、パートナーが使用するオペレーティング システムのインベントリを実行することを強くお勧めします (後者の 2 つはアウトリーチ/コミュニケーションまたは少なくとも HTTP User-Agent 文字列コレクションを介して)。 このインベントリは、エンタープライズ ネットワーク エッジでのトラフィック分析によってさらに補足できます。 このような状況では、トラフィック分析によって、サービスに接続している顧客/パートナーによって正常にネゴシエートされた TLS バージョンが得られますが、トラフィック自体は暗号化されたままになります。
TLS 1.0 の依存関係を排除するための Microsoft のエンジニアリングの機能強化
このドキュメントの v1 リリース以降、Microsoft は TLS 1.0 の非推奨をサポートする多数のソフトウェア更新プログラムと新機能を提供しています。 これらには次のものが含まれます。
クライアント IP/ユーザー エージェント文字列、サービス URI、TLS プロトコルのバージョン、暗号スイートを関連付ける IIS カスタム ログ。
- このログ記録により、管理者は最終的に弱い TLS への顧客の露出を定量化できます。
SecureScore - Office 365 テナント管理者が自分の脆弱な TLS の使用状況を特定できるように、SecureScore ポータルは、2018 年 10 月に Office 365 で TLS 1.0 のサポート終了としてこの情報を共有するように構築されています。
このポータルでは、Office 365 テナント管理者は、自分の TLS 1.0 の依存関係を認識できない可能性があるお客様に連絡するために必要な貴重な情報を提供します。
詳細については、https://securescore.microsoft.com/ を参照してください。
.Net Framework は、アプリ レベルのハードコーディングを排除し、フレームワークが継承した TLS 1.0 の依存関係を防ぐために更新されます。
開発者向けガイダンスとソフトウェア更新プログラムがリリースされ、お客様が .NET Framework を使用した脆弱な TLS: トランスポート層セキュリティ (TLS) のベスト プラクティスに対する .Net の依存関係を特定して排除するのに役立ちます
- FYI: TLS 1.2 をサポートするには、.NET 4.5 以下を対象とするすべてのアプリを変更する必要がある可能性があります。
TLS 1.2 は Windows Server 2008 SP2 および XP POSReady 2009 にバックポートされ、お客様が従来の義務を果たせるようにしました。
その他のお知らせは 2019 年初頭に行われ、このドキュメントの以降の更新で伝達されます。
コードでの TLS 1.0 の依存関係の検索と修正
Windows OS で提供される暗号化ライブラリとセキュリティ プロトコルを使用する製品の場合、次の手順は、アプリケーションでハードコーディングされた TLS 1.0 の使用状況を特定するのに役立ちます。
AcquireCredentialsHandle() のすべてのインスタンスを識別します。 これにより、校閲者は、TLS がハードコーディングされる可能性があるコード ブロックに近づくのに役立ちます。
ハードコーディングされた TLS の SecPkgContext_SupportedProtocols および SecPkgContext_ConnectionInfo 構造体のインスタンスを確認します。
ネイティブ コードでは、 grbitEnabledProtocols の 0 以外の割り当てを 0 に設定します。 これにより、オペレーティング システムは既定の TLS バージョンを使用できます。
このドキュメントの TLS 1.0/1.1 を明示的に無効にするために必要な設定と競合する可能性があるため、 FIPS モード が有効になっている場合は無効にします。 詳細については、 付録 B を参照してください。
Server 2012 以前でホストされている WinHTTP を使用して、アプリケーションを更新して再コンパイルします。
マネージド アプリ – 最新の .NET Framework バージョンに対するリビルドと再ターゲット
アプリケーションでは、WinHttpSetOption 経由で TLS 1.2 をサポートするコードを追加する必要があります
すべてのベースをカバーするには、TLS ハードコーディングで一般的に使用される列挙型の値に対応する以下のパターンのソース コードとオンライン サービス構成ファイルをスキャンします。
SecurityProtocolType
SSLv2、SSLv23、SSLv3、TLS1、TLS 10、TLS11
WINHTTP_FLAG_SECURE_PROTOCOL_
SP_PROT_
NSStreamSocketSecurityLevel
PROTOCOL_SSLまたはPROTOCOL_TLS
上記のすべてのケースで推奨される解決策は、ハードコーディングされたプロトコル バージョンの選択を削除し、オペレーティング システムの既定値に延期することです。 DevSkim を使用している場合は、ここをクリックして、独自のコードで使用できる上記のチェックに関する規則を確認します。
Windows PowerShell スクリプトまたは関連するレジストリ設定を更新する
Windows PowerShell では .NET Framework 4.5 が使用されます。使用可能なプロトコルとして TLS 1.2 は含まれていません。 これを回避するには、次の 2 つのソリューションを使用できます。
問題のスクリプトを次のように変更します。
[System.Net.ServicePointManager]::SecurityProtocol = [System.Net.SecurityProtocolType]::Tls12;.NET アプリから TLS 1.2 接続を行う必要がある任意のコンピューターに、システム全体のレジストリ キー (グループ ポリシー経由など) を追加します。 これにより、.NET は使用可能なプロトコルとして TLS 1.2 を追加する "システムの既定値" TLS バージョンを使用し、OS でサポートされている場合にスクリプトで将来の TLS バージョンを使用できるようになります。 (例: TLS 1.3)
reg add HKLM\SOFTWARE\Microsoft.NETFramework\v4.0.30319 /v SystemDefaultTlsVersions /t REG_DWORD /d 1 /f /reg:64
reg add HKLM\SOFTWARE\Microsoft.NETFramework\v4.0.30319 /v SystemDefaultTlsVersions /t REG_DWORD /d 1 /f /reg:32
ソリューション (1) と (2) は相互に排他的であり、一緒に実装する必要はありません。
最新の .Net Framework バージョンを使用してマネージド アプリケーションをリビルド/再ターゲットする
4.7 より前のバージョンの .NET Framework を使用するアプリケーションでは、基になる OS の既定値に関係なく、TLS 1.0 のサポートを実質的に制限する制限がある場合があります。 詳細については、次の図と .NET Framework でのトランスポート層セキュリティ (TLS) のベスト プラクティス を参照してください。
SystemDefaultTLSVersion は、TLS バージョンのアプリ レベルのターゲット設定よりも優先されます。 推奨されるベスト プラクティスは、OS の既定の TLS バージョンを常に延期する方法です。 また、アプリが将来の TLS 1.3 サポートを利用できるようにする唯一の暗号化アジャイル ソリューションでもあります。
4.5.2 や 3.5 などの以前のバージョンの .NET Framework を対象としている場合、既定では、アプリケーションでは SSL 3.0 や TLS 1.0 などの古くて推奨されないプロトコルが使用されます。 .NET Framework 4.6 などの新しいバージョンの .NET Framework にアップグレードするか、'UseStrongCrypto' の適切なレジストリ キーを設定することを強くお勧めします。
TLS 1.2 以降を使用したテスト
上記のセクションで推奨される修正に従って、製品は、プロトコル ネゴシエーション エラーと、社内の他のオペレーティング システムとの互換性について回帰テストする必要があります。
この回帰テストで最も一般的な問題は、TLS 1.2 をサポートしていないオペレーティング システムまたはブラウザーからのクライアント接続試行による TLS ネゴシエーションエラーです。
- たとえば、Vista のサポートされる TLS の最大バージョンは 1.0 であるため、Vista クライアントは TLS 1.2 以降用に構成されたサーバーと TLS のネゴシエートに失敗します。 そのクライアントは、TLS 1.2 以降の環境でアップグレードするか、使用を停止する必要があります。
証明書ベースの相互 TLS 認証を使用する製品では、TLS 1.0 に関連付けられた証明書選択コードの表現力が TLS 1.2 よりも低かったため、追加の回帰テストが必要になる場合があります。
- 製品が (Windows の標準の名前付き証明書ストアの外部にある) 標準以外の場所の証明書と MTLS をネゴシエートする場合、そのコードを更新して証明書が正しく取得されるようにする必要がある場合があります。
サービス間の依存関係は、問題の箇所を確認する必要があります。
サードパーティサービスと相互運用するサービスは、それらのサードパーティとの追加の相互運用テストを実施する必要があります。
使用中の Windows 以外のアプリケーションまたはサーバー オペレーティング システムでは、TLS 1.2 をサポートできることを調査/確認する必要があります。 スキャンは、これを判断する最も簡単な方法です。
オンライン サービスでこれらの変更をテストするための簡単なブループリントは、次で構成されます。
運用環境システムのスキャンを実行して、TLS 1.2 をサポートしていないオペレーティング システムを特定します。
「コードでの TLS 1.0 依存関係の検索と修正」の説明に従って、ハードコーディングされた TLS のソース コードとオンライン サービス構成ファイルをスキャンします
必要に応じてアプリケーションを更新/再コンパイルします。
管理されているアプリ
最新の .NET Framework バージョンに対してリビルドします。
OS の既定の設定を使用するために、 SSLProtocols 列挙型の使用が SSLProtocols.None に設定されていることを確認します。
WinHTTP アプリ – Tls 1.2 をサポートするために WinHttpSetOption を使用して再構築する
TLS 1.2 より古いセキュリティ プロトコルをすべて レジストリで無効にして、実稼働前またはステージング環境でテストを開始します。
テストで発生した TLS ハードコーディングの残りのインスタンスを修正します。 ソフトウェアを再デプロイし、新しい回帰テストの実行を実行します。
TLS 1.0 の非推奨計画をパートナーに通知する
TLS ハードコーディングに対処し、オペレーティング システム/開発フレームワークの更新が完了したら、TLS 1.0 を非推奨にすることを選択する場合は、顧客やパートナーと調整する必要があります。
TLS 1.0 の廃止ロールアウトを成功させるには、早期のパートナー/顧客アウトリーチが不可欠です。 少なくとも、これはブログ投稿、ホワイトペーパー、またはその他の Web コンテンツで構成されている必要があります。
パートナーはそれぞれ、上記のセクションで説明したオペレーティング システム/コード スキャン/回帰テスト イニシアチブを通じて、独自の TLS 1.2 対応性を評価する必要があります。
結論
TLS 1.0 の依存関係の削除は、エンド ツー エンドで実行するための複雑な問題です。 Microsoft と業界のパートナーは、現在、OS コンポーネントや開発フレームワークから、その上に構築されたアプリケーション/サービスまで、製品スタック全体のセキュリティを既定で強化するために、これに対処しています。 このドキュメントに記載されている推奨事項に従うと、企業が適切なコースをグラフ化し、期待する課題を把握するのに役立ちます。 また、お客様が移行の準備を整えるのにも役立ちます。
付録 A: www.microsoft.comに接続するさまざまなクライアントのハンドシェイク シミュレーション、提供 SSLLabs.com
付録 B: FIPS モードを維持しながら TLS 1.0/1.1 を非推奨にする
ネットワークで FIPS モードが必要ですが、TLS 1.0/1.1 も非推奨にする場合は、次の手順に従います。
不要な TLS バージョンに対して "有効" を 0 に設定して、 レジストリを使用して TLS バージョンを構成します。
グループ ポリシーを使用して Curve 25519 (Server 2016 のみ) を無効にします。
関連する FIPS パブリケーションで許可されていないアルゴリズムを使用している暗号スイートを無効にします。 サーバー 2016 の場合 (既定の設定が有効であると想定)、これは RC4、PSK、NULL 暗号を無効にすることを意味します。
共同作成者/感謝
Mark Cartwright
Bryan Sullivan
パトリック ジャングルズ
Michael Scovetta
トニーライス
David LeBlanc
Mortimer Cook
Daniel Sommerfeld
Andrei Popov
道子ショート
Justin Burke
Gov Maharaj
Brad Turner
ショーン・スティーブンソン