SSL/TLS プロトコル バージョンの有効化と無効化

Last Update: feedback 共有

本記事はマイクロソフト社員によって公開されております。

こんにちは。Windows Commercial Support Directory Services チームです。
今回は Windows OS で利用される SSL/TLS のプロトコルの有効化と無効化についてご紹介いたします。

2021 年現在、SSL/TLS の暗号化プロトコルとして TLS 1.2 以降のご利用を推奨しており、OS として暗号化プロトコルを無効にする方法について多くのお問い合わせをいただいております。暗号化プロトコルを無効化するためには、以下の公開情報の通り、様々な事前の検討などが必要となりますが、今回はプロトコルの設定に絞ってご案内いたします。

TLS 1.0 の問題の解決、第 2 版
https://docs.microsoft.com/ja-jp/security/engineering/solving-tls1-problem


OS 毎の SSL/TLS プロトコルの既定の設定とサポートの状況について

OS 毎の SSL/TLS プロトコルの対応状況については以下の公開情報でご案内しております。
OS としては、Schannel と呼ばれる認証プロバイダーの設定を利用しており、SSL、DTLS、および SSL プロトコルをサポートしています。

TLS/SSL のプロトコル (Schannel SSP)
https://docs.microsoft.com/ja-jp/windows/win32/secauthn/protocols-in-tls-ssl--schannel-ssp-
※ 各プロトコルは、クライアントとサーバーの役割ごとに設定が可能となっており、Enabled は既定で有効になっていることを示しています。


OS として各プロトコルの有効化と無効化の手順について

各プロトコルの有効化と無効化につきましては、以下のレジストリを設定します。

◆ SSL2.0
・クライアント
レジストリ キー: HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\SSL 2.0\Client

・サーバー
レジストリ キー: HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\SSL 2.0\Server

◆ SSL3.0
・クライアント
レジストリ キー: HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\SSL 3.0\Client

・サーバー
レジストリ キー: HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\SSL 3.0\Server

◆ TLS 1.0
・クライアント
レジストリ キー: HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.0\Client

・サーバー
レジストリ キー: HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.0\Server

◆ TLS 1.1
・クライアント
レジストリ キー: HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.1\Client

・サーバー
レジストリ キー: HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.1\Server

◆ TLS 1.2
・クライアント
レジストリ キー: HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.2\Client

・サーバー
レジストリ キー: HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.2\Server

上記の各レジストリ キー配下それぞれに、以下の値を設定することで有効化 / 無効化の設定ができます。

値: Enabled
値の種類: DWORD
設定値: 0x0 (無効) ← 無効化する場合はこちらを指定
     0x1 (有効) ← 有効化する場合はこちらを指定

値: DisabledByDefault
値の種類: DWORD
設定値: 0x0 (既定で有効) ← 有効化する場合はこちらを指定
     0x1 (既定で無効) ← 無効化する場合はこちらを指定


Enabled は OS で TLS 1.0/1.1/1.2 を有効/無効にするかを決めるレジストリです。 一方で、DisabledByDefault はアプリケーションが明示的に SSL/TLS のバージョンを指定しない場合に、OS が自動的にそのバージョンの SSL/TLS 通信を行うかどうかを決定します。"DisabledByDefault" を 0 に設定しますと、該当の SSL/TLS のバージョンが "既定で有効" になり、1 に設定しますと "既定で無効" になります。しかしながら、"DisabledByDefault" がいずれの設定の場合でもアプリケーションが明示的に指定した場合には、Enabled の値が 1 で有効であれば指定されたバージョンの SSL/TLS 通信が行われます。

OS としてはレジストリ設定直後から、即自内容が反映されます。
しかしながら、TLS 通信時に Schannel を利用するアプリケーションの実装によっては、
設定変更後も次回 TLS 通信時に即時反映されないシナリオもございます。
このシナリオに対処するためには、アプリケーションの再起動や OS 再起動をご検討ください。

トランスポート層セキュリティ (TLS) のレジストリ設定

D)TLS または SSL プロトコルのバージョンを Disabled 状態に切り替えると、 AcquireCredentialsHandle 呼び出しが失敗する可能性があります。これは、システム全体で有効になっているプロトコル バージョンがなく、同時に特定の SSPI 呼び出し元によって許可されているためです。 さらに、 Enabled (D)TLS と SSL のバージョンのセットを減らすと、リモート ピアとの相互運用性が損なわれます。
(D)TLS または SSL プロトコルのバージョン設定を変更すると、後続の AcquireCredentialsHandle 呼び出しによって開かれる資格情報ハンドルを使用して確立された接続で有効になります。 (D)TLS と SSL のクライアントおよびサーバー > アプリケーションとサービスは、パフォーマンス上の理由から、複数の接続に対して資格情報ハンドルを再利用する傾向があります。 これらのアプリケーションで資格情報ハンドルを再取得するには、アプリケーションまたはサービスの再起動が必要な場合があります。


(参考) レジストリをコマンドで設定する方法

上記でご案内しましたレジストリの設定をコマンドで設定する場合は、管理者として以下のコマンドを実行します。

◆ SSL 2.0 を OS として無効にする場合
reg add “HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\SSL 2.0\Client” /v Enabled /t REG_DWORD /d 0 /f
reg add “HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\SSL 2.0\Server” /v Enabled /t REG_DWORD /d 0 /f
reg add “HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\SSL 2.0\Client” /v DisabledByDefault /t REG_DWORD /d 1 /f
reg add “HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\SSL 2.0\Server” /v DisabledByDefault /t REG_DWORD /d 1 /f

◆ SSL 3.0 を OS として無効にする場合
reg add “HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\SSL 3.0\Client” /v Enabled /t REG_DWORD /d 0 /f
reg add “HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\SSL 3.0\Server” /v Enabled /t REG_DWORD /d 0 /f
reg add “HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\SSL 3.0\Client” /v DisabledByDefault /t REG_DWORD /d 1 /f
reg add “HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\SSL 3.0\Server” /v DisabledByDefault /t REG_DWORD /d 1 /f

◆ TLS 1.0 を OS として無効にする場合
reg add “HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.0\Client” /v Enabled /t REG_DWORD /d 0 /f
reg add “HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.0\Server” /v Enabled /t REG_DWORD /d 0 /f
reg add “HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.0\Client” /v DisabledByDefault /t REG_DWORD /d 1 /f
reg add “HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.0\Server” /v DisabledByDefault /t REG_DWORD /d 1 /f

◆ TLS 1.1 を OS として無効にする場合
reg add “HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.1\Client” /v Enabled /t REG_DWORD /d 0 /f
reg add “HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.1\Server” /v Enabled /t REG_DWORD /d 0 /f
reg add “HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.1\Client” /v DisabledByDefault /t REG_DWORD /d 1 /f
reg add “HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.1\Server” /v DisabledByDefault /t REG_DWORD /d 1 /f

トランスポート層セキュリティ (TLS) のレジストリ設定
https://docs.microsoft.com/ja-jp/windows-server/security/tls/tls-registry-settings


各プロトコルが無効になったことの確認について

レジストリによって各プロトコルを無効化した後に、実際にプロトコルが無効化されていることを確認する方法についてお問い合わせもいただきます。
OS としてコマンドなどで確認できる方法は準備されておりませんので、レジストリが正しく設定されているかをご確認いただければ問題ございません。


更新履歴

2021/12/23 : 本ブログの公開
2025/06/19 : レジストリ修正後の再起動に関する旨を追記