本記事はマイクロソフト社員によって公開されております。
こんにちは。Windows プラットフォーム サポートです。
Windows OS とサードパーティの OS やアプリケーションと SSL/TLS 接続を行う環境において、
特定のアルゴリズムが含まれる暗号スイートを利用している場合、稀に接続が失敗するという問題についての
一般的な原因と対処方法について、ご説明いたします。
発生事象
Windows OS とサードパーティの OS やアプリケーションと SSL/TLS 接続を行う環境で、特定のアルゴリズムが
含まれる暗号スイートを利用している場合、約 256 回に 1 回、TLS 接続が失敗するという事象となります。
発生環境
鍵交換アルゴリズムとしてDHE が利用されているSSL/TLS の暗号スイートを利用している環境のみで発生します。
鍵交換アルゴリズムに、RSA または ECDHE を利用するSSL/TLS の暗号スイートを利用している環境では発生しません。
この問題は、Windows OS が SSL/TLS クライアント、サードパーティの OS やアプリケーションが SSL/TLS サーバーの場合、または
Windows OS が SSL/TLS サーバー、サードパーティの OS やアプリケーションが SSL/TLS クライアントの場合、
いずれの環境においても発生しうる事象となります。
発生原因
DHE の鍵交換アルゴリズムの処理中に使用する様々なキーの先頭 1 バイトのビット列が全て 0 となっている場合は、
キーから先頭の 0 バイトを削除するという処理が発生します。この際、OS やアプリケーションの実装差異が存在するため、
当該のキーから先頭の 0 バイトが削除されている場合に、正しくキーを認識することができないことが原因となります。
対応状況
Windows OS においてもこの DHE の処理に対して、サードパーティの OS やアプリケーションと
互換性を維持するために様々な修正が行われております。
しかしながら、2021 月 2 月時点においても、最新の更新プログラムが適用されている Windows OS と
サードパーティの OS やアプリケーションとの接続において稀に失敗するという事象が報告されております。
このため、このような問題が発生する環境においては、DHE が含まれる暗号スイートの利用を停止し、その他の鍵交換アルゴリズムを利用する暗号スイートを利用いただくことをお勧めいたします。
対処方法
対象のコンピューター上で、レジストリ エディターを管理者として起動します。
以下のレジストリを右クリックし、[修正] を選択します。
1 | キー : HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Cryptography\Configuration\Local\SSL\00010002 |
※ 対象のレジストリは以下となります。
- 以下の DHE を含むすべての Cipher Suites で存在しているものを削除します。
- Windows OS がサポートする DHE を含む暗号スイート一覧
1 | TLS_DHE_RSA_WITH_AES_256_GCM_SHA384 |
※ 以下の DHE から始まる行を全て削除します。
- 設定を反映させるために OS を再起動します。
- 参考情報
Cipher Suites in TLS/SSL (Schannel SSP) - Win32 apps | Microsoft Docs
注意事項
- セキュリティについて
DHE を使用しない場合、現時点では、RSA とECDHE が利用可能です。多くの業界によるガイドラインが示すように、セキュリティの観点から、
ECDHE をご利用いただくことを強く推奨いたします。
- Windows OS 同士の SSL/TLS 接続環境について
上記の通り、DHE を利用する暗号化スイートに関する修正プログラムの適用状況の差異によって、Windows OS 同士で
DHE を利用するの暗号化スイートを使用した SSL/TLS 接続においても、本事象が発生しうることにご注意ください。
Applications experience forcibly closed TLS connection errors when connecting SQL Servers in Windows
- TLS/SSL の暗号スイートをグループ ポリシーで配布している環境について
TLS/SSL の暗号スイートをドメイン、もしくは、ローカルのグループ ポリシーで配布している環境の場合、
上記の対処手順を実施した場合も DHE を含む暗号スイートの利用は停止されません。
この理由として、グループ ポリシーで設定したレジストリの設定値の方が、ローカルのレジストリの
設定値よりも優先されるためとなります。
このような環境の場合、後述の対処方法 (補足) の手順を実施し、グループ ポリシーから、SSL/TLS の暗号スイートの設定を変更します。
- グループ ポリシーで設定した場合のレジストリ
1 | キー : HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Cryptography\Configuration\SSL\00010002 |
- ローカルのレジストリ
1 | キー : HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Cryptography\Configuration\Local\SSL\00010002 |
対処方法 (補足)
- ドメインの SSL/TLS を設定しているグループ ポリシー オブジェクト (GPO)、もしくは、ローカルのグループ ポリシーを開きます。
- ドメインのグループ ポリシーの場合は、gpmc.msc から [グループ ポリシーの管理] を開き、対象の GPO を選択し、[編集] をクリックします。
- ローカルのグループ ポリシーの場合は、gpedit.msc から、[ローカル グループ ポリシー エディター] を開きます。
左側ペインから、以下を展開し、右側ペインの [SSL 暗号の順位] をダブルクリックします。
1
2
3
4
5[コンピューターの構成]
- [ポリシー]
- [管理用テンプレート]
- [ネットワーク]
- [SSL 構成設定]ドメインのグループ ポリシーの例)
[有効] を選択し、”オプション” の “SSL 暗号” のテキストボックスに表示された文字列をすべて選択してコピーし、テキスト エディタに貼り付けます。
SSL 暗号のテキストボックスを Crtl + A で全選択し、コピーします。
テキスト エディターにペーストします。※ 半角 “,” ではなく、全角 “、” になっている場合、半角 “,” に置き換えを行います。
- 次の DHE を含むすべての Cipher Suites で存在しているものを削除します。
- Windows OS がサポートする DHE を含む暗号スイート一覧
TLS_DHE_RSA_WITH_AES_256_GCM_SHA384
TLS_DHE_RSA_WITH_AES_128_GCM_SHA256
TLS_DHE_RSA_WITH_AES_256_CBC_SHA
TLS_DHE_RSA_WITH_AES_128_CBC_SHA
TLS_DHE_DSS_WITH_AES_256_CBC_SHA256
TLS_DHE_DSS_WITH_AES_128_CBC_SHA256
TLS_DHE_DSS_WITH_AES_256_CBC_SHA
TLS_DHE_DSS_WITH_AES_128_CBC_SHA
TLS_DHE_DSS_WITH_3DES_EDE_CBC_SHA
TLS_DHE_DSS_WITH_DES_CBC_SHA
TLS_DHE_DSS_EXPORT1024_WITH_DES_CBC_SHA
上記の DHE を含む暗号スイートを全て削除し、暗号スイート毎の区切りの “,” も削除します。
編集したテキスト ファイルの内容で、上記 4. の “SSL 暗号” の内容を置き換えます。
[OK] を押して、設定を完了します。
クライアント側には、上記ポリシー設定が自動的に 1.5 - 2 時間で反映されるため、ポリシー適用後に念のため、OS の再起動を行います。
※ ドメインのサイト構成によっては、ポリシーの適用に 1.5 - 2 時間以上の時間を要する場合がございます。