Windows Serverで解消するSchannel TLSエラー 36871/36874の完全対策

Windows ServerにおけるTLSエラー(Schannel 36871や36874)に悩まされる方は多いのではないでしょうか。最近ではWindows Update適用後に突如発生する例も報告されています。本記事では、具体的な設定例やトラブルシューティングの手順を徹底解説し、スムーズな解消をサポートいたします。

Windows Serverで発生するSchannel TLSエラーとは

Windows Server 2019やWindows Server 2022などでしばしば見られるSchannelのTLSエラー(イベントID 36871や36874)は、暗号化通信をハンドリングするコンポーネントが原因で記録されるものです。TLS接続の確立が正常に行われない場合、イベントビューアーのシステムログに頻出し、サーバーの安定稼働に影響を与えます。

エラー概要と発生状況

  • イベントID 36871: 「TLSクライアント資格情報の作成中に致命的なエラーが発生しました」
  • イベントID 36874: 「クライアントが提示した暗号スイートがサーバーにサポートされていないため、TLS 1.2接続要求が失敗しました」

これらのエラーが大量に記録されると、サーバーのパフォーマンス低下や、場合によってはクライアントからの正常なアクセスが妨げられる可能性もあります。

なぜこのエラーが起きるのか

大半のケースでは、クライアントとサーバー間の暗号スイートやTLSプロトコルのバージョン不一致、もしくは証明書の問題が原因となることが多いです。とりわけ、Windowsのアップデート(累積アップデートや.NET Frameworkの更新など)を適用すると暗号スイートの優先度やTLSハンドシェイクの仕組みが変化し、これまで正常に動作していた環境で突如エラーが発生する場合があります。

イベントログの読み方とトラブル発生の背景

システムログでのエラー確認

Windows Server環境では、イベントビューアーの「Windowsログ → システム」を開き、ソース「Schannel」をキーワードに絞り込むと関連エラーが一覧表示されます。エラーのタイミングや回数を把握することで、どのような操作やアプリケーションが契機となっているかを推測できます。

具体的なログの見方

  1. イベントID 36871
  • TLSクライアント資格情報の生成が失敗している場合に記録
  • 内部エラー状態は「10013」や「10010」などが記される
  1. イベントID 36874
  • TLS 1.2の暗号スイート不一致などで接続要求が拒否される際に記録

エラー発生の背景

複数の要因が考えられますが、代表的なものを以下に示します。

  1. 暗号スイート不一致: クライアントが提示する暗号スイートをサーバーがサポートしていない
  2. TLSバージョンの不一致: サーバー側でTLS 1.2や1.3を有効にしていない、またはクライアントの設定が古い
  3. 証明書の問題: 証明書が有効期限切れ、または信頼されていないCAから発行されている
  4. OSやアプリケーションのアップデートによる仕様変更: 既存の設定がアップデート後に非推奨や無効化されるケース

暗号スイートとTLSプロトコルの設定

暗号スイートの基本を理解する

TLS通信では、クライアントとサーバーが共通してサポートする暗号スイートを使用してセッションを確立します。暗号スイートとは、暗号アルゴリズム・キー交換方式・ハッシュ関数などを組み合わせたセットのことで、セキュリティ強度やパフォーマンスに大きく影響します。

暗号スイートの確認ツール

  • IIS CryptographyなどのGUIツールを利用すると、サーバーのサポート状況が一目で分かります
  • PowerShellのEnable-TlsCipherSuiteDisable-TlsCipherSuiteコマンドレットで、特定の暗号スイートを有効・無効化できます

TLSバージョンの設定

サーバーおよびクライアントの双方で、TLS 1.2が有効になっているかを確認することが最初のステップです。特にWindows Server 2012 R2以前の環境を長らく使い続けてきた組織の場合、古いTLSバージョン(1.0や1.1)が残存していることも考えられます。
下記のレジストリ設定例を基に、TLS 1.2を有効にする設定を再度確認してみてください。

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.2\Server
  DisabledByDefault = 0
  Enabled = 1

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.2\Client
  DisabledByDefault = 0
  Enabled = 1

証明書の管理と更新

証明書の有効期限と信頼性

TLSエラーの原因として見落とされがちなのが、証明書の更新切れです。証明書の有効期限が切れていたり、CAルート証明書が信頼できない状態になっている場合、TLSハンドシェイクで拒否されることがあります。
certlm.msc(ローカルコンピュータの証明書管理)を開き、「個人 → 証明書」や「信頼されたルート証明機関 → 証明書」などを確認してください。

中間証明書の欠落

中間証明書が適切にインストールされていないと、クライアント側で証明書チェーンが途中で切れてしまうことがあります。一般的な商用CAが提供する中間証明書は必ずインポートし、証明書チェーンが正しく連結されているか確認しましょう。

レジストリ設定と.NET FrameworkのTLSサポート

レジストリによる詳細な制御

Windows Serverではレジストリを直接編集することで、TLSや暗号化の挙動を細かく制御できます。上記のTLS 1.2有効化設定以外にも、以下のようなキーを追加して強力な暗号を優先する設定を行うことが可能です。

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\CipherSuites

暗号スイートを細かく制御したい場合は、ここで優先度や使用可否を指定することができます。ただし一歩間違えると通信障害が起きるリスクもあるため、必ずバックアップを取ってから作業を行ってください。

.NET Frameworkのバージョンと強力な暗号化設定

ASP.NETやその他のアプリケーションが.NET Frameworkを使用している場合、.NETのバージョンによってはTLS 1.2を自動で使用しない可能性があります。特に4.5未満のバージョンでは既定でTLS 1.2が無効な場合もあるため、下記のレジストリ設定が有効です。

[HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\.NETFramework\v2.0.50727]
  "SystemDefaultTlsVersions" = dword:00000001
  "SchUseStrongCrypto" = dword:00000001

[HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Microsoft\.NETFramework\v4.0.30319]
  "SystemDefaultTlsVersions" = dword:00000001
  "SchUseStrongCrypto" = dword:00000001

これらを設定後、サーバー再起動やアプリケーションのリサイクル(IISなど)が必要となることもあるため留意してください。

パッチ適用後のエラー対策

累積アップデートによる仕様変更

2024年以降の累積アップデートで、暗号スイートの既定設定やTLSバージョンの制御方式が変更される可能性があります。その結果、かつて問題なく動作していたシステムで急にTLSエラーが多発するケースが報告されています。

アップデート適用手順の見直し

  • テスト環境で先にアップデートを適用し、暗号スイートや証明書周りのエラーがないか検証
  • 本番サーバーに適用する際は、事前に取得したバックアップと環境スナップショットを用意

再適用やアンインストールによる検証

アップデートをアンインストールし、問題が解決するかどうかを切り分けるのは有効な方法です。しかしながら、最近のWindows Server向けパッチでは依存関係が複雑化しているため、アンインストールが容易に行えないケースもあります。
この場合、更新後に新たに有効化された暗号スイート設定を無効化する、またはレジストリ設定を再適正化することで対処可能です。

具体的な設定例:テーブル

実際の環境で行う設定例をまとめると、以下のようになります。表を参考にしながら、自身のサーバー環境に合った調整を行ってください。

項目レジストリ パス/コマンド例推奨設定備考
TLS 1.2有効化HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.2\Server
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.2\Client
DisabledByDefault = 0
Enabled = 1
キー作成後、再起動が必要
.NET Framework
(TLS強化)
[HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\.NETFramework\v2.0.50727]
[HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Microsoft\.NETFramework\v4.0.30319]
SystemDefaultTlsVersions = 1
SchUseStrongCrypto = 1
IISの再起動が必要
暗号スイートの制御Enable-TlsCipherSuite
Disable-TlsCipherSuite
必要に応じて整合するスイートを有効化PowerShell 5.1以降でサポート
古いTLS/SSLの無効化HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\SSL 2.0などEnabled = 0
DisabledByDefault = 1
セキュリティ向上のため推奨

高速化のコツ:暗号化の最適化とログ解析

暗号スイートの優先度調整

セキュリティとパフォーマンスの両面を考慮する場合、暗号スイートの優先度設定が鍵を握ります。
強固な暗号スイートほどCPU負荷が高くなる傾向がありますが、一部のハードウェアにはAES-NI(AES命令セット)などの暗号化アクセラレーションが搭載されています。サーバー側での暗号スイート優先度を見直すことで、パフォーマンスの向上を期待できます。

ログ解析ツールの活用

Schannelログの詳細化

グループポリシーやレジストリでSchannelの詳細ログを有効にすると、失敗している暗号スイートや、TLSハンドシェイクのどの段階で問題が発生しているのかを詳細に追跡可能です。
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\EventLoggingの値を調整して、デバッグレベルのログを取得することができます。

Wiresharkによるパケット解析

アプリケーションレベルでのログ収集に加え、ネットワーク層での挙動を確認するにはWiresharkが有効です。TLSハンドシェイク時のClient HelloやServer Helloに含まれる暗号スイート一覧から、不一致がないかリアルタイムで診断できます。

まとめ

SchannelのTLSエラー(イベントID 36871や36874)が多発する主な原因は、暗号スイートやTLSバージョンの不一致、証明書の不備、そしてWindowsのアップデートによる設定変更に起因するものが多いです。対策としては、下記ポイントを総合的にチェックするのがお勧めです。

  1. 暗号スイートの整合性確認: クライアントとサーバー両面で設定を見直す
  2. TLS 1.2(または1.3)の有効化: レジストリやPowerShellで確実に設定
  3. 証明書の有効期限や信頼チェーンを確認: 商用CAの場合は中間証明書を含むチェーンを正しく登録
  4. .NET Frameworkの強力な暗号化設定: 古いフレームワークを使っている場合はレジストリ変更
  5. Windowsアップデート後の検証: テスト環境での事前確認とログ解析を徹底

これらの手順を踏むことで、多くの場合はエラーが緩和または解消され、安定したTLS通信環境を維持できます。もし問題が解決しない場合は、さらなるログ解析やベンダーサポートの利用を検討してみてください。特に複雑なアプリケーションやクラウド環境との連携が絡む場合は、ネットワークレイヤーとアプリケーションレイヤーの両面で詳細に調査を行う必要があります。

コメント

コメントする