【AD CS】証明書失効リスト(CRL)の仕組みを解説!

証明書失効リスト(CRL)は、証明機関で発行された証明書の中で失効した証明書の一覧を記載したものです。

証明書の正当性を検証するときに、証明書に記載されている CDP から CRL を取得して、証明書が失効されていないか確認します。

今回は証明書失効リストの仕組みの詳細について紹介します。

 

Base CRL と Delta CRL

証明書失効リスト(CRL) とは、証明機関にて失効された証明書を一覧の情報を記載したファイルのことです。

CRL は CDP と呼ばれる誰でもアクセス可能な場所に公開されており、CDP から CRL を取得して証明書が失効されていないか確認します。

CRL には 2 つ種類があり、Base CRL と Delta CRL があります。

Base CRL
これまでに失効された全ての証明書の一覧が記載されているファイルです。
Active Directory 証明書サービスで構築した証明機関の場合、ファイルの更新間隔は 7 日です。

Delta CRL
新たに失効された証明書の一覧が記載されているファイルです。
Active Directory 証明書サービスで構築した証明機関の場合、ファイルの更新間隔は 1 日です。

各 CRL ファイルには有効期間が設定されており、有効期限が切れる前に更新される動作となります。

 

Base CRL と Delta CRL の更新間隔は以下の図の通りです。

 

上記の図は、Base CRL の有効期間が 7 日(既定値)、Delta CRL の有効期間が 1 日(既定値)の場合において、各 CRL が更新されるタイミングを表した図となります。

有効期限が 8/16 に Base CRL が更新されたとします。
この時に更新された Base CRL は、CA サーバーを構築してから今までに失効された証明書の一覧が記載されます。
また、このタイミングで、Base CRL①の有効期限は 7 日後の 8/23 にセットされます。

Delta CRL は、Base CRL が更新された後に新たに失効された証明書の一覧が記載されています。
上図の場合、8/16 の Base CRL が更新されたタイミングにおいては、Delta CRL には失効された証明書の情報は含まれておりません。
翌日の 8/17 には、Delta CRL① に更新されるまでの 24 時間(=1 日間)の間に新たに失効された証明書の一覧が含まれます。
また、翌々日の 8/18 には、Delta CRL②に更新されるまでの間に新たに失効された証明書の一覧が追加されて更新されます。
つまり、Delta CRL② には 8/16 ~ 8/18 の 48 時間(=2 日間) の間に新たに失効した証明書の一覧が含まれます。


このように、Base CRL が次に更新されるまでの 7 日間の間に、Delta CRL に新たに失効された証明書が記載されますので、新たに証明書を失効してから最大 1 日後には失効情報を反映させることができます。

 

CRL の更新

CRL ファイルには有効期間が設定されており、有効期間が切れる前に自動で更新されます。
最新の証明書の失効情報を含む CRL を更新して、CDP に公開されます。

Base CRL の更新間隔は既定で 7 日間、Delta CRL の更新間隔は既定で 1 日となりますが、更新間隔を変更することも可能です。

更新間隔の設定変更の手順は以下の通りです。

1) [Windows 管理ツール] より [証明機関] をクリックし、certsrv の管理コンソールを開きます。

2) certsrv の画面の左ペインを展開し、[証明機関 (ローカル)][<CA 名>][失効した証明書] を右クリックして [プロパティ] をクリックします。

3) [CRL 公開のパラメーター] より、CRL の公開間隔を変更して、[適用][OK] をクリックします。

[CRL 公開期間] の項目が Base CRL の有効期間の設定で、[Delta CRL を公開する] の項目が Delta CRL の有効期間の設定の項目となります。

このプロパティ画面で、次回の Base CRL と Delta CRL の更新日時を確認することができます。

 

CRL の手動更新

証明書を失効した後、すぐに CRL に追加したい場合は手動で CRL を更新します。
手動で CRL を更新する手順は以下の通りです。

1) [Windows 管理ツール] にて [証明機関] をダブルクリックして  certsrv の管理ツールを開きます。

2) [証明機関(ローカル)][<CA 名>][失効した証明書] を右クリックして、[すべてのタスク][公開] をクリックします。

 

3) [CRL の公開] にて、[公開する CRL の種類] の項目を選択して [OK] をクリックします。
     [新しい CRL] を選択した場合、Base CRL に最新の失効情報が更新されます。
     [Delta CRL のみ] を選択した場合、Delta CRL に最新の失効情報が更新されます。(Base CRL は更新されません。)

 

CRL のキャッシュ

Windows OS では CRL のキャッシュをディスクに保持しております。

証明書の失効確認においては、毎回 CDP にアクセスして CRL をダウンロードしてくるのではなく、まず CRL のキャッシュの有無を確認します。
有効期間内のキャッシュであれば、その情報をもとに証明書の失効確認を行います。

新たに証明書を失効して CRL を更新したとしても、Windows OS の場合は CRL のキャッシュを利用して失効確認しておりますので、新たな失効情報を反映させるためにはキャッシュを削除する必要があります。

CRL のキャッシュは、証明書の検証を行ったアカウント(ユーザー、SYSTEM アカウント、LocalService アカウント等)のプロファイル上に保存されています。
CRL キャッシュの保存場所は以下の通りとなります。

%userprofile%\AppData\LocalLow\Microsoft\CryptnetUrlCache\Content
%userprofile%\AppData\LocalLow\Microsoft\CryptnetUrlCache\MetaData

 

証明書の検証を行ったのが、ユーザー アカウントであればユーザー プロファイル(C:\Users\<ユーザー名>) のAppData の下に保存されています。
ユーザー アカウント上に保存されている CRL キャッシュを手動で削除する場合は、コマンド プロンプトを立ち上げて以下のコマンドを実行します。

  certutil -urlcache * delete

 

ユーザー以外のシステム アカウントが証明書を検証の処理を行った場合、CRL のキャッシュは以下の場所に保存されます。

– SYSTEM アカウントのキャッシュ情報
%windir%\System32\config\systemprofile\AppData\LocalLow\Microsoft\CryptUrlCache\Content
%windir%\System32\config\systemprofile\AppData\LocalLow\Microsoft\CryptUrlCache\MetaData
%windir%\SysWOW64\config\systemprofile\AppData\LocalLow\Microsoft\CryptUrlCache\Content
%windir%\SysWOW64\config\systemprofile\AppData\LocalLow\Microsoft\CryptUrlCache\MetaData

– LocalService アカウントのキャッシュ情報
%windir%\ServiceProfiles\LocalService\AppData\LocalLow\Microsoft\CryptUrlCache\Content
%windir%\ServiceProfiles\LocalService\AppData\LocalLow\Microsoft\CryptUrlCache\MetaData
%windir%\SysWOW64\config\LocalService\AppData\LocalLow\Microsoft\CryptUrlCache\Content
%windir%\SysWOW64\config\LocalService\AppData\LocalLow\Microsoft\CryptUrlCache\MetaData

– NetworkService アカウントのキャッシュ情報
%windir%\ServiceProfiles\NetworkService\AppData\LocalLow\Microsoft\CryptUrlCache\Content
%windir%\ServiceProfiles\NetworkService\AppData\LocalLow\Microsoft\CryptUrlCache\MetaData
%windir%\SysWOW64\config\NetworkService\AppData\LocalLow\Microsoft\CryptUrlCache\Content
%windir%\SysWOW64\config\NetworkService\AppData\LocalLow\Microsoft\CryptUrlCache\MetaData

 

エクスプローラー上から手動で削除してください。