【PKI応用】Windows TLS 1.0/TLS 1.1 廃止に関する仕様変更

PKI

BEAST 攻撃やダウングレード攻撃など、TLS 1.1 以下の SSL/TLS バージョンについては脆弱性が確認されています。脆弱性を利用した攻撃を受けて、SSL/TLS の暗号化された通信を傍聴されたり、改ざんされたり等のリスクから身を守るために、TLS 1.2 以上のバージョンを利用することを推奨しております。

すでに SSL 3.0 は廃止が進んでおりますが、今回、TLS 1.0、TLS 1.1 の廃止にむけて、Windows では KB5017811 のセキュリティ更新プログラムが、2022 年 9 月 22 日に公開されています。KB5017811 の仕様変更による影響がでる可能性もあるので、どのような変更があったのか具体的に紹介します。

 

KB5017811 での仕様変更

TLS 1.1 以前の SSL/TLS バージョンが利用可能な環境では、脆弱性を利用して攻撃できることが報告されています(Beast 攻撃、ダウングレード攻撃など)。そのため、 SSL/TLS の暗号化通信においては、TLS 1.2 もしくは TLS 1.3 を利用することが推奨されています。

Windows OS での SSL/TLS 通信を処理するモジュール Schannel.dll では、既定で TLS 1.0、TLS 1.1 は有効となっており、利用可能な TLS バージョンとなります。しかしながら、TLS 1.0 と TLS 1.1 の廃止に向けて、2022 年 9 月 22 日に公開された KB5017811 にて TLS 1.0 と TLS 1.1 に関する仕様変更が行われました。KB5017811 では、以下の 3 点の仕様変更が行われています。

 

  • WinINet にて TLS 1.0 と TLS 1.1 が既定で無効
  • WinHTTP にて TLS 1.0 と TLS 1.1 が既定で無効
  • TLS バージョンのフォールバックが無効

 

そのため、KB5017811 を適用すると WinINet や WinHTTP を利用するアプリケーションでは、TLS 1.0 と TLS 1.1 が既定で無効となり利用されなくなります。ただし、OS レベルの Schannel.dll では引き続き TLS 1.0 と TLS 1.1 は既定で有効の状態となりますので、WinINet と WinHTTP にて TLS 1.0 と TLS 1.1 を利用する設定に戻したら、再び TLS 1.0 と TLS 1.1 を利用できる構成となります。

また、Windows 10 以前の OS では、TLS バージョンをフォールバックする動作となっていました。TLS バージョンのフォールバックとは、クライアント端末が TLS 1.2 を指定して TLS の通信要求(Client Hello)を送信して、TLS 1.2 での TLS 通信の確立に失敗した場合、次に TLS 1.1 での通信要求を行うというように、TLS のバージョンを 1 つずつ落として(フォールバックして)、TLS 通信を試行するという動作のことです。KB5017811 を適用すると、この TLS バージョンのフォールバックが無効となり、もしTLS 1.2 での TLS 通信の確立に失敗した場合は、そのまま TLS 通信失敗という結果となります。

KB5017811 の適用により、WinINet や WinHTTP にて TLS 1.0 と TLS 1.1 が既定で無効となりますので、WinINet もしくは WinHTTP を利用するアプリケーションで SSL/TLS 通信ができなくなるという問題が発生する可能性があります。その場合、サーバー側が TLS 1.2 に対応していないという可能性がありますので、一時的な回避策として、WinINet や WinHTTP の設定を KB5017811 適用前の動作に戻すことで問題を回避できるかご確認ください。

 

WinINet での TLS バージョン変更

WinINet は、HTTP や FTP などのプロトコルを利用して通信を行う機能を提供するライブラリのことで、Windows OS 上で動作するアプリケーションにて利用されていることがあります。wininet.dll は Internet Explorer に付属されており、DLL や API のサポートは現在でも行われております。HTTPS 通信を行うアプリが WinINet にて実装されている場合、WinINet での SSL/TLS のプロトコル バージョンの設定が影響する可能性がございます。

もし、KB5017811 の適用にて、アプリケーションでの SSL/TLS 通信に失敗するようになったら、WinINet にて TLS 1.0 と TLS 1.1 を明示的に有効にして、問題が解決するかご確認ください。WinINet でのプロトコル バージョンは [インターネット オプション] にて設定できます。

端末ごとの設定手順

1) [ファイル名を指定して実行] を開いて、control と入力して [OK] をクリックします。
2) コントロール パネルにて、[表示方法] を “大きいアイコン” もしくは “小さいアイコン” に変更します。
3) [インターネット オプション] をクリックします。
4) [インターネットのプロパティ] にて、[詳細設定] タブを選択します。
5) [セキュリティ] の項目において、以下の項目にて有効にする SSL/TLS バージョンのチェックボックスを有効にします。

TLS 1.0 を使用する
TLS 1.1 を使用
TLS 1.2 を使用
TLS 1.3 を使用する

上記のオプションを全て有効にします。

 

グループ ポリシーでの配布

ドメイン環境で管理している各端末に、[インターネット オプション] のTLS バージョンを指定する設定を配布するには、以下のポリシーを設定していただければ問題ございません。以下の管理用テンプレートは、コンピューター ポリシー([コンピューターの構成] のポリシー)、ユーザー ポリシー([ユーザーの構成] のポリシー) の両方を設定することができます。

ポリシー:[管理用テンプレート] – [Windows コンポーネント] – [Internet Explorer] – [インターネット コントロール パネル] – [[詳細設定] ページ]
パス:[暗号化サポートを無効にする]
設定値:有効
オプションの [安全なプロトコルの組み合わせ] にて、有効にするプロトコル バージョンの組み合わせを選択

 

 

WinHTTP での TLS バージョン変更

WinHTTP は Windows OS 上で動作するアプリケーションにて、HTTP 通信を行う機能を提供するライブラリのことです。HTTPS 通信を行うアプリケーションが WinHTTP で実装している場合、WinHTTP での SSL/TLS のプロトコル バージョンの設定が影響している可能性があります。

もし、KB5017811 の適用にて、アプリケーションでの SSL/TLS 通信に失敗するようになったら、WinHTTP にて TLS 1.0 と TLS 1.1 を明示的に有効にして、問題が解決するかご確認ください。WinHTTP でのプロトコル バージョンは DefaultSecureProtocols のレジストリにて設定できます。

キー: HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Internet Settings\WinHttp
名前: DefaultSecureProtocols
種類:REG_DWORD
設定値:0x00000a80

DefaultSecureProtocols の設定に関して、各バージョンに値が割り当てられています。

WinHTTP にて、TLS 1.2、TLS 1.1、TLS 1.0 を有効にする場合において、設定値の値は以下の通りに計算します。

TLS 1.0 + 1.1 + 1.2 = 0x80 + 0x200 + 0x800 = 0x00000A80

 

各バージョンに割り当てられいる値については、以下のマイクロソフトの公式情報をご確認ください。

 

フォールバックの動作変更

Windows 10 以前の Windows OS では、SSL/TLS 通信においてバージョンをフォールバックする動作となります。

バージョンのフォールバックとは、クライアント端末が TLS 1.2 を指定して TLS の通信要求(Client Hello)を送信して、TLS 1.2 での TLS 通信の確立に失敗した場合、次に TLS 1.1 での通信要求を行うというように、TLS のバージョンを 1 つずつ落として(フォールバックして)、TLS 通信を試行するという動作のことです。

Windows 11 では、TLS バージョンのフォールバックの動作は既定で無効となっております。Windows 10 においても KB5017811 を適用した後は、TLS バージョンのフォールバックは無効となります。そのため、もしTLS 1.2 での TLS 通信の確立に失敗した場合は、そのまま TLS 通信失敗という結果となります。

KB5017811 を適用した後も、TLS バージョンのフォールバックを行いたい場合は、WinINet については、以下のレジストリを設定することで有効に戻すことができます。

キー:HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Internet Settings
値:EnableInsecureTlsFallback
型:REG_DWORD
設定値:1
 
WinINet と WinHTTP の設定をもとに戻すことで、事象が回避した場合、対象のサーバーは TLS 1.1 もしくは TLS 1.0 のみの対応に構成になっている可能性が高いと考えられます。恒久対処としては、ここまでに紹介した KB5017811 適用後にも TLS 1.1、TLS 1.0 を利用できる構成に変更する暫定対処ではなく、サーバー側で TLS  1.2 もしくは TLS 1.3 に対応するように構成変更して、TLS 1.2 以上のバージョンで TLS 通信できるように構成を見直しましょう。
 
 

関連事例

社内の Web サーバーの HTTPS サイトにこれまでは正常にアクセスできていたけれども、クライアント端末にKB5017811 を適用した後にアクセスできなくなったという事象が発生する可能性があります。ブラウザで対象の HTTPS サイトにアクセスすると、以下のエラー メッセージのようなメッセージがアクセスされることがあります。
このページに安全に接続できません

※ 表示されるエラー メッセージの内容はブラウザによって異なる可能性があります。
 
WinINet を利用して実装されているブラウザでは、KB5017811 の適用以前では、既定で TLS 1.2、TLS 1.1、TLS 1.0 は有効になっています。(Schannel.dll でも既定で TLS 1.0 ~ 1.2 は有効です。)
接続先の Web サーバーが TLS 1.1 もしくは TLS 1.0 にしか対応していない場合でも、KB5017811 の適用以前では TLS 1.2 での接続に失敗しても、その後にフォールバックの動作で TLS 1.1 や TLS 1.0 での通信の試行を行います。そのため、これまでは TLS 通信は確立できておりましたが、KB5017811 を適用した後は、フォールバックしないために、TLS 1.2 での通信確立に失敗したら、そのまま “このページに安全に接続できません” というエラー メッセージが表示されて、サーバーに接続できない状況になります。
この事象の対処法は、以下の 3 つあります。
  1. [インターネット オプション] で [TLS 1.0 を使用する] もしくは [TLS 1.1 を使用] のみを有効
  2. レジストリ EnableInsecureTlsFallback にてフォールバックを有効
  3. Web サーバーで TLS 1.2 を利用できるように構成変更 (推奨)

 

 

〇マイクロソフトの公開情報(KB5017811)
KB5017811—Manage Transport Layer Security (TLS) 1.0 and 1.1 after default behavior change on September 20, 2022
https://support.microsoft.com/en-us/topic/kb5017811-manage-transport-layer-security-tls-1-0-and-1-1-after-default-behavior-change-on-september-20-2022-e95b1b47-9c7c-4d64-9baf-610604a64c3e