Web サイトで利用されているサーバー証明書や、アプリケーションのインストーラーに付与されているコード署名を信頼する時、証明書の検証が行われます。証明書を検証する時、信頼できる証明機関から発行された証明書であるかどうかを確認します。この時、証明書のチェーンを確認して、最上位にあるルート証明書を信頼しているかを確認しています。
2022 年現在、世界中には多くのサードパーティーのルート証明機関が存在しています。
証明書の検証を行う度に、必要なルート証明書を手動でインストールするのは現実的ではありません。
Windows OS では、ルート証明書を自動で登録する仕組みとして、”ルート証明書更新プログラム” というものがあります。既定で有効の機能で、ユーザーが意識しなくても、必要なルート証明書を自動でインストールされます。
今回は、ルート証明書更新プログラムの基本的な機能について紹介します。
ルート証明書更新プログラムとは?
Windows OS でルート証明書を信頼するためには、[信頼されたルート証明機関] の証明書ストアに登録されている状態にします。
世界中に多くのルート証明機関があり、信頼できるルート証明書を手動で登録するのは現実ではありません。
ユーザーが証明書の仕組みを知らなくても、信頼できるルート証明書を自動でインストールできる機能が必要です。
Windows OS では、ルート証明書を自動でインストールする機能として、”ルート証明書更新プログラム” があります。
この機能は、Windows OS で既定で有効であるため、追加の設定など必要なく利用されます。
Windows OS が自動で証明書の信頼性を検証できるように、以下の機能が含まれています。
- 信頼できるルート証明書を自動インストールする
- 信頼できないルート証明書を検知する
ルート証明書更新プログラムで定義されている、2 つの機能の動作を詳細に見ていきます。
1. 信頼できるルート証明書を自動インストールする
Windows OS では、事前に信頼できる全てのルート証明書をインストールしておくという仕組みではありません。
必要なタイミングで、必要なルート証明書のみを登録します。
証明書の検証を行うタイミングで、ルート証明書更新プログラムの機能がトリガーされます。
証明書チェーン上のルート証明書を信頼していない場合、ルート証明書を自動でインストールします。
ルート証明書の自動インストールのフローを確認します。
① 証明書の検証が開始
インターネット上の HTTPS サイトへアクセスした時のシナリオを考えます。
この時、Web サーバーは身分証明として、サーバー証明書を提示してきます。
クライアント端末は、サーバー証明書の信頼性を確認するための検証を行います。
② 証明書チェーンの確認
サーバー証明書の信頼性を確認するためには、この証明書が信頼できる証明機関から発行されている必要があります。
サーバー証明書の証明書チェーンをたどって、ルート証明書が [信頼されたルート証明機関] ストアに登録されているか確認します。
ルート証明書が [信頼されたルート証明機関] に登録されていない場合、この時点ではサーバー証明書を信頼していいのかわかりません。
ここで、ルート証明書更新プログラムが動作します。
③ “信頼できるルート証明書のリスト” を参照
マイクロソフトはインターネット上に “信頼できるルート証明書のリスト” を公開しています。
ルート証明書更新プログラムでは、その公開先の URL にアクセスしてリストをダウンロードします。
http://ctldl.windowsupdate.com/msdownload/update/v3/static/trustedr/en/authrootstl.cab
authrootstl.cab に含まれるリストから、ルート証明書が含まれているかを確認します。
この時、機関キー識別子を使って、リストに該当するルート証明書の有無を特定しています。
ルート証明書更新プログラムの動作により、OS の更新(修正)プログラムが適用されることはありません。
サーバー証明書の信頼性は確認できなかったため、Web ブラウザ上に警告もしくはエラー画面を表示させます。
④ ルート証明書を入手
マイクロソフトはインターネット上に “信頼できるルート証明書のリスト” にある各ルート証明書も公開しています。
該当のルート証明書がリストに含まれていた場合、URL にアクセスしてルート証明書をダウンロードします。
ルート証明書をダウンロードする URL には、そのルート証明書の拇印が含まれます。
http://ctldl.windowsupdate.com/msdownload/update/v3/static/trustedr/en/<証明書の拇印>.crt
⑤ ルート証明書をインストール
ダウンロードしたルート証明書は [信頼されたルート証明機関] ストアにインストールします。
証明書チェーンの最上位にあるルート証明書を信頼したら、中間証明書やサーバー証明書も信頼できることになります。
証明書のデジタル署名により、各証明書は信頼できる証明機関から発行されており、改ざんされていないことが担保されるためです。
そのため、サーバー証明書は信頼できると判断できるようになります。
一度、インストールしたルート証明書は、そのまま [信頼されたルート証明機関] ストアに残り続けます。
2. 信頼できないルート証明書を検知する
これまで信頼できたルート証明書も、セキュリティ リスクが出てきて信頼できなくなることがあります。
例えば、ルート証明機関の秘密鍵が漏洩した場合、そのルート証明書は信頼はできなくなります。
証明機関が証明書を発行する時、デジタル署名は秘密鍵が利用されます。
秘密鍵が漏洩したら、悪意のあるユーザーが信頼される証明書を発行して悪用されるリスクがあります。
そのため、セキュリティ リスクがでたルート証明書は “信頼されない” ものとして扱えることが大切です。
ルート証明書更新プログラムでは、証明書の検証を行う度に、ルート証明書が “信頼されない” 状態となっていないか確認します。
その際、マイクロ ソフトがインターネット上に公開している “信頼されないルート証明書のリスト” を参照します。
この機能により、一度信頼したルート証明書も、信頼できなくなったら検知できるようになっています。
信頼できないルート証明書のチェックの際のフローを確認します。
① 証明書の検証が開始
インターネット上の HTTPS サイトへアクセスした時のシナリオを考えます。
この時、Web サーバーは身分証明として、サーバー証明書を提示してきます。
クライアント端末は、サーバー証明書の信頼性を確認するための検証を行います。
② “信頼できるルート証明書のリスト” を参照
マイクロソフトはインターネット上に “信頼されないルート証明書のリスト” に公開しています。
ルート証明書更新プログラムでは、その公開先の URL にアクセスしてリストをダウンロードします。
http://ctldl.windowsupdate.com/msdownload/update/v3/static/trustedr/en/disallowedcertstl.cab
disallowedcertstl.cab に含まれるリストから、ルート証明書が含まれているかを確認します。
この時、拇印を使って、リストに該当するルート証明書の有無を特定しています。
③ ルート証明書の信頼性を検証
“信頼できないルート証明書のリスト” に対象のルート証明書が含まれていないか確認します。
リストに含まれていなければ、ルート証明書を信頼できます。
リストに該当するルート証明書がある場合、ルート証明書は信頼できないものとみなされます。
サーバー証明書の信頼できなかったため、Web ブラウザ上に警告もしくはエラー画面を表示させます。
リストのキャッシュ
ルート証明書更新プログラムが動作する度に、毎回、MS サイトからリストをダウンロードするわけではありません。
一度ダウンロードした authrootstl.cab、disauthrootstl.cab はキャッシュとして保持します。
authrootstl.cab のキャッシュの有効期間は 7 日間で、disauthrootstl.cab のキャッシュの有効期間は 16 時間です。
有効期間内のキャッシュがある場合、ルート証明書更新プログラムが動作しても URL から cab ファイルはダウンロードしません。
キャッシュを利用して、ルート証明書を自動でインストールしたり、信頼されないルート証明書のチェックを行います。
そのため、ルート証明書更新プログラムの動作により、ネットワークの通信量への影響は想定されません。
ルート証明書更新プログラムの無効化
Windows OS ではルート証明書更新プログラムは既定で有効となっております。
そのため、特に追加の設定を行わなくても、ルート証明書は自動で登録される動作となります。
ルート証明書更新プログラムを無効化したい場合は、以下のポリシーにて設定変更を行うことができます。
ポリシー パス
[コンピュータの構成]-[ポリシー]-[Windowsの設定]-[セキュリティの設定]-[公開キーのポリシー]-[証明書パス検証の設定]
設定値
[ネットワークの取得] タブで [これらのポリシーの設定を定義する] にチェックを入れた上で
[Microsoft ルート証明書プログラムで証明書を自動更新する] のチェックをはずします。
上記のポリシーを設定すると、以下のレジストリが設定されます。
値:DisableRootAutoUpdate
型:REG_DWORD
設定値: 1
おまけ:オフライン時の動作
ルート証明書更新プログラムの機能はインターネットに接続されていることが前提です。
ただし、Windows OS 端末がオフライン環境で ctldl.windowsupdate.com へアクセスできない状態でもルート証明書が自動インストールされることがあります。
Windows OS 端末がオフライン環境の場合、ルート証明書更新プログラムは以下のファイルを参照します。
crypt32.dll のライブラリには、信頼されるルート証明書のリストやルート証明書のデータが含まれております。
そのため、オフライン環境でもルート証明書更新プログラムは crypt32.dll を参照し、ルート証明書が自動インストールされることがあります。
ただし、crypt32.dll には最新の情報が含まれているわけではないため、オンライン時と同様の機能を提供できるわけではありません。
オフライン時にルート証明書更新プログラムを利用する構成については、以下の記事で紹介しております。
Windows OS ではルート証明書を自動登録できる "ルート証明書更新プログラム" という機能があります。 ルート証明書更新プログラムの基本的な仕組みは、以下の記事で紹介しておりますのでご参照ください。 [sitecard subt[…]