システム イベント (ソース:Schannel) ID 36887/36888 は SSL/TLS 通信に関するエラー イベント ログです。
今回は、ID 36887/36888 のイベント ログの意味や確認すべきポイントについて紹介します。
この問題を解決するには、SSL/TLS の基本知識が必要です。
また、SSL/TLS の一般的な仕組みについては、以下の記事で紹介していますのでご参照ください。
イベント ID 36871 の概要
システム イベント ログに以下のようなエラー ログが記録されていることがあります。
ソース: Schannel
日付: YYYY/MM/DD HH:MM:SS
イベント ID: 36871
タスクのカテゴリ: なし
レベル: エラー
キーワード:
ユーザー: SYSTEM
コンピューター: <コンピューター名>
説明:
TLS クライアント 資格情報を作成しているときに致命的なエラーが発生しました。内部エラーの状態は 10013 です。
SSL/TLS 通信の開始のタイミングで問題が発生し、SSL/TLS 通信の開始に失敗したことを示すログです。
イベント ID 36871 エラーは、アプリケーションが要求した SSL/TLS のバージョンと、OS として利用できる SSL/TLS のバージョンの中で、共通するバージョンが存在せず SSL/TLS 通信の要求に失敗した時に記録されるイベントです。
これらのエラー ログの原因となった SSL/TLS 通信が、不要な通信である可能性もあります。
そのため、このエラー ログが記録されたタイミングにおいて、特に問題が発生していない場合は無視して問題ありません。
例えば、HTTPS サイトにアクセスできない、リモートデスクトップ接続できない等の問題が発生している場合です。
その場合、ID 36887/36888 エラー ログをもとに原因調査を進めることができます。
対処策
ID 36871 エラーのトリガーが判明している場合
イベント ID 36871 は、OS と共通したプロトコル バージョンがなかったために、アプリケーションでの SSL/TLS 通信に失敗したことを示すエラーです。そのため、エラーが発生するアプリケーションが特定できていれば、アプリケーションもしくは OS の SSL/TLS 設定を変更することで問題の解消が見込まれます。
Internet Explorer で HTTPS の Web サイトへアクセスした時に、画面にエラーが表示して接続に失敗し、同じタイミングにイベント ID 36871 エラーが記録されるシナリオを想定します。このシナリオにおいては、Ineternet Explorer 側の設定を見直し、OS がサポートしているプロトコル バージョンを Internet Explorer 側で有効にすることで問題の解消が見込まれます。
アプリケーションの SSL/TLS の設定と、OS の 設定を確認します。
アプリケーションの SSL/TLS 設定
Internet Explorer の場合は、インターネット オプションにて SSL/TLS のバージョン設定を確認・変更できます。
1) [ファイル名を指定して実行] を開いて、control と入力して [OK] をクリックします。
2) コントロール パネルにて、[表示方法] を “大きいアイコン” もしくは “小さいアイコン” に変更します。
3) [インターネット オプション] をクリックします。
4) [インターネットのプロパティ] にて、[詳細設定] タブを選択します。
5) [セキュリティ] の項目において、以下の項目にて各 SSL/TLS バージョンが有効・無効のどちらなのかを確認します。
SSL 3.0 を使用する
TLS 1.0 を使用する
TLS 1.1 を使用
TLS 1.2 を使用
TLS 1.3 を使用する
チェックが有効となっている TLS バージョンが、そのアプリケーションの設定としては有効で利用可能です。
上図の設定の場合、TLS 1.0、TLS 1.1、TLS 1.2 が有効となっております。
上記は、Internet Explorer における SSL/TLS のバージョンの設定ですが、設定箇所はアプリケーションごとに異なります。
該当のアプリケーションの設定方法は、製造元の公式サイトや技術ブログなどで確認してください。
Windows OS の TLS 設定手順
Windows OS で SSL/TLS 通信の処理は schannel.dll というモジュールで行われております。
Windows OS の SSL/TLS の設定は、schannel 関連のレジストリ設定にて変更できます。
以下の手順で、レジストリ設定を確認してください。
1) 対象の端末に管理者権限をもつユーザーでログオンします。
2) [ファイル名を指定して実行] を開いて、regedit と入力して [OK] をクリックします。
3) レジストリ エディターを開き、以下のレジストリ キーを選択します。
キー:HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols
4) Protocols キーの下に、各プロトコルにて OS が無効にする設定が含まれていないか確認します。
対象のバージョンキーに対して、Enabled が 0 となっていると無効の設定となります。
■ 例:SSL 3.0 が無効の設定
値: Enabled
値の種類: REG_DWORD
設定値: 0x0
上記の例の場合は、SSL 3.0 を無効にするレジストリです。
他のバージョンの設定については、上記のレジストリ キーの <SSL 3.0> の部分が、<TLS 1.0> や <TLS 1.1> などに変わります。
上記の図のレジストリ エディターは、既定のレジストリ設定となります。
管理者ユーザーが特定のバージョンを手動で有効・無効に変更するレジストリ設定などを行っていない場合、上記の通り Protocols 配下には何もレジストリは設定されておりません。この設定の場合、SSL/TLS の各バージョンの有効/無効の設定は OS ごとの既定値となります。
Windows OS の各 TLS バージョンの有効、無効の既定設定に関する公開情報は以下の通りです。
TLS/SSL のプロトコル (Schannel SSP)
https://docs.microsoft.com/ja-jp/windows/win32/secauthn/protocols-in-tls-ssl–schannel-ssp-
OS のバージョンを確認した後、アプリケーションの設定を OS の設定に合わせて必要な SSL/TLS のプロトコル バージョンを有効にしてください。
また、SSL 3.0 はアプリケーションの既定値としては、Windows 10 1607、Windows Server 2016 から無効になっています。(DisabledByDefault が 1)
ID 36871 エラーのトリガーが不明である場合
どのアプリケーションが OS がサポートしていないバージョンで SSL/TLS 通信を要求しているかわからない場合、アプリケーションの SSL/TLS 設定に関連する以下の設定を OS の設定と併せることで事象が解消するか確認してみてください。
[1] WinHTTP
[2] WinINet
[3] .NET Framework
設定方法は以下の通りです。
[1] WinHTTP
WinHTTP は Windows OS 上で動作するアプリケーションにて、HTTP 通信を行う機能を提供するライブラリのことです。HTTPS 通信を行うアプリケーションが WinHTTP で実装している場合、WinHTTP での SSL/TLS のプロトコル バージョンの設定が影響している可能性があります。
WinHTTP でのプロトコル バージョンは DefaultSecureProtocols のレジストリにて設定できます。
名前: DefaultSecureProtocols
種類:REG_DWORD
設定値:0x00000a80
各バージョンに割り当てられいる値については、以下のマイクロソフトの公式情報をご確認ください。
https://docs.microsoft.com/en-us/microsoft-365/compliance/tls-1.0-and-1.1-deprecation-for-office-365?view=o365-worldwide
有効とするバージョンを全て合計した値を DefaultSecureProtocols に設定します。
TLS 1.0 + 1.1 + 1.2 = 0x80 + 0x200 + 0x800 = 0x00000A80
TLS 1.1 + 1.2 = 0x200 + 0x800 = 0x00000A00
TLS 1.0 + 1.2 = 0x80 + 0x800 = 0x00000880
TLS 1.2 = 0x00000800
[2] WinINet
WinINet は、HTTP や FTP などのプロトコルを利用して通信を行う機能を提供するライブラリのことで、Windows OS 上で動作するアプリケーションにて利用されていることがあります。wininet.dll は Internet Explorer に付属されており、DLL や API のサポートは現在も行われております。HTTPS 通信を行うアプリケーションが WinINet にて実装している場合、WinINet での SSL/TLS のプロトコル バージョンの設定が影響している可能性があります。
WinINet でのプロトコル バージョンは [インターネット オプション] にて設定できます。
1) [ファイル名を指定して実行] を開いて、control と入力して [OK] をクリックします。
2) コントロール パネルにて、[表示方法] を “大きいアイコン” もしくは “小さいアイコン” に変更します。
3) [インターネット オプション] をクリックします。
4) [インターネットのプロパティ] にて、[詳細設定] タブを選択します。
5) [セキュリティ] の項目において、以下の項目にて有効にする SSL/TLS バージョンのチェックボックスを有効にします。
SSL 3.0 を使用する
TLS 1.0 を使用する
TLS 1.1 を使用
TLS 1.2 を使用
TLS 1.3 を使用する
[3] .NET Framework
.NET Framework にて実装されたアプリケーションの場合、.NET Framework の SSL/TLS のプロトコル バージョンの設定を意識する必要があります。
.NET Framework のバージョンごとに、利用できる SSL/TLS のバージョンに違いがあります。
.NET Framework 3.5 (3.5.1)
既定では TLS 1.1、TLS 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、TLS 1.1 および TLS 1.2
.NET Framework 4.7.x
TLS 1.1 / TLS 1.2 に対応済み
プロパティの既定値は SystemDefault となり、OS の TLS の設定が反映される
.NET Framework 4.8.x
TLS 1.1 / TLS 1.2 に対応済み
プロパティの既定値は SystemDefault となり、OS の TLS の設定が反映される
Windows OS では、TLS 1.2 が最優先で利用されるプロトコル バージョンとなります。
.NET Framework 4.6.x ~ .NET Framework 4.8.x に関しては基本的には問題ありませんが、NET Framework 3.5 (3.5.1)、.NET Framework 4.5.2 に関しては TLS 1.1 と TLS 1.2 が利用できる構成に変更することをおすすめします。.NET Framework 3.5 (3.5.1)、.NET Framework 4.5.2 にて、TLS 1.1 と TLS 1.2 が利用できるようにする手順は以下の通りです。
.NET Framework 3.5 (3.5.1)
.NET Framework 3.5.1 の場合、TLS 1.1 と TLS 1.2 をサポートした更新プログラムを適用した後、.NET Framework のプロトコル バージョンを OS の設定に従うように設定変更します。
- 更新プログラムの適用
.NET Framework 3.5 では、既定の状態では TLS 1.1 また TLS 1.2 を利用することはできません
.NET Framework 3.5 で TLS 1.1 と TLS 1.2 を利用できるようにするための 更新プログラムを適用する必要があります。以下に NET Framework 3.5 を利用できる更新を含む KB を紹介しますが、最新のロールアップの更新を適用されていれば基本的には問題ありません。
Windows Server 2008
KB3154517
Windows Server 2008 R2 / Windows 7
KB3154518
Windows Server 2012
KB3154519
Windows Server 2012 R2 / Windows 8.1
KB3154520
Windows 10 v1507 (LTSC)
KB3192440
Windows 10 v1607 (LTSC) / Windows Server 2016
KB3201845 もしくは KB3206632
Windows 10 v1703 / Windows Server 2019 以降
.NET Framework 3.5 の機能を有効化した時点で TLS 1.1、TLS 1.2 には対応しています。
追加で更新プログラムの適用は必要ありません。
- レジストリの設定
.NET Framework 3.5 では SSL 3.0 および TLS 1.0 が既定で利用できるプロトコル バージョンです。
TLS 1.1、TLS 1.2 を利用可能とする更新プログラムを適用したら、以下のレジストリを設定して OS(Schannel.dll)で設定しているプロトコル バージョンに従います。
キー:HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFramework\v2.0.50727
値:SystemDefaultTlsVersions
型:DWORD
設定値: 1
キー:HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\.NETFramework\v2.0.50727
値:SystemDefaultTlsVersions
型:DWORD
設定値: 1
.NET Framework 4.5.2
.NET Framework 4.5.2 では、SSL 3.0 と TLS 1.0 が既定で利用可能なプロトコル バージョンです。
以下のセキュリティ アドバイザリー 2960358 で公開されている更新プログラムを適用すれば、既定値を TLS 1.0、TLS 1.1、TLS 1.2 が利用可能なプロトコル バージョンとなるように構成変更することが可能です。
マイクロソフト セキュリティ アドバイザリ 2960358
https://docs.microsoft.com/ja-jp/security-updates/securityadvisories/2015/2960358
上記の更新プログラムを適用した後、既定値が変更されたかレジストリの設定よりご確認ください。
更新プログラムを適用した後に、以下の通りにレジストリが設定されていたら、正常に適用されています。
キー:HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFramework\v4.0.30319
値:SchUseStrongCrypto
型:DWORD
設定値: 1
キー:HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\.NETFramework\v4.0.30319
値:SchUseStrongCrypto
型:DWORD
設定値: 1