【AD CS】証明書失効リスト(CRL)を手動で有効期間を延長する方法

  • 2022年8月28日
  • 2022年8月29日
  • AD CS, PKI

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

証明書の正当性を検証するときに、証明書に記載されている CDP(CRL 配布ポイント)から CRL を取得して、証明機関から証明書が失効されていないか確認します。CRL には有効期間が定義されておりますが、失効されていないかを確認するときに CRL の有効期限が切れていると、失効確認に失敗します。

今回は、CRL の有効期間が切れないように、手動で CRL の有効期間を延長する方法について紹介します。

 

AD CS での CRL の自動更新

CRL には有効期間が設定されています。Active Directory 証明書サービスで構築した証明機関では、既定で Base CRL の有効期間は 1 週間、Delta CRL の有効期間は 1 日となります。

Active Directory 証明書サービスで構築した証明機関では、”Active Directory 証明書サービス” が稼働中の状態の場合、定期的なタイミングにて CRL を自動更新して CDP へ公開します。CRL の更新頻度や次回の更新日時は [失効した証明書のプロパティ] 画面より確認できます。

このように、Active Directory 証明書サービスには CRL を自動更新できる仕組みがあるため、管理者が意識しなくても CDP 上には有効期間内の CRL が公開されています。ただし、CRL を自動更新する処理は、”Active Directory 証明書サービス” が行っているため、この CRL が自動更新されるには “Active Directory 証明書サービス” が稼働中であり、また CA を構成している端末がオンラインである必要があります。

CA サーバーがシャットダウンしていたり、オフラインの状態である場合、CRL を自動更新して CDP に公開することができません。長期間 CA サーバーが使えない場合、CDP 上に公開されている CRL の有効期間が切れた状態になる可能性があります。CRL の有効期間が切れると、証明書の失効確認に失敗します。CA サーバーの端末のメンテナンス作業など、長時間、”Active Directory 証明書サービス” が停止する状態、またはオフラインの状態になる場合は CRL の有効期限が切れないか留意する必要があります。

 

長時間、AD CS が停止している場合、CRL の有効期限が切れる可能性があります
 
 

AD CS のサービス停止の影響

AD CS サービスが長期間、オフラインで利用不可の状態であっても、以下の条件がそろっていれば、発行済みの証明書の利用できます。
  • 証明書チェーンが構成できる
  • 証明書の失効確認が行える

証明書を利用できるには、証明書が検証できれば問題ありません。
証明書の検証の処理として、具体的な仕組みについては、以下の記事で紹介しております。

あわせて読みたい!

証明書はコンピューターやユーザーの身分を証明するためのものです。 ただし、インターネット上の身元のわからない相手から提示された証明書の正当なのかどうかわかりません。 通信相手から提示された証明書が、本当に信頼してよいのかを判断するために[…]

証明機関が利用不可でも、発行済みの証明書は利用できますが、証明機関が利用できない場合の影響は以下の 3 点です。

  • 証明書が新規発行できない
  • 証明書の失効できない
  • CRL(証明書失効リスト) を更新できない

 

AD CS サービスが停止すると、CRL を自動更新できないため、時間が経過すると CRL の有効期間がきれる恐れがあります。AD CS で構築した証明機関が発行した証明書を検証するとき、証明書を検証する端末は CDP へアクセスして CRL を取得して、証明書が失効されていないかを確認します。
 
 
AD CS サービスが長期間停止しており、CDP から入手した CRL の有効期間が切れている場合、有効な CRL が入手できなかったとみなされ、証明書の失効確認に失敗する動作となります。証明書の失効確認に失敗した場合、どのような動作になるかはアプリケーションによって異なってきます。機能が利用できない、ユーザーに警告画面を表示する等の影響がでる場合もありますが、失効確認に失敗しても何の影響もでないこともあります。
証明書の失効確認に失敗した時の影響については、各製品の製造元に確認してください。
 
 

対処策:CRL の更新

CA サーバーのメンテナンス作業など、”Active Directory 証明書サービス” が長期間停止してすることが事前に決まっている場合、作業前に事前に CRL を手動で延長して CRL の有効期間を延ばしておく方法が有効です。
CRL の手動での更新方法として、① certsrv の管理ツールから手動で更新する方法、② CA 証明書の秘密鍵を利用して CRL を再署名する方法の 2 通りの方法があります。
① の方法は certsrv の管理ツールから更新する方法なので、メンテナンス作業などで Active Directory 証明書サービスが停止される状態になる前に、管理ツールから作業を行う方法として有効です。一方、② の方法は、CA 証明書の秘密鍵付きのエクスポート ファイルを事前にご準備いただく必要はありますが、Active Directory 証明書サービスが停止した状態でも、手動で CRL を更新して CDP へ公開することができる方法となります。これは証明機関において何らかの障害が発生してすぐに復旧できない場合に、証明書の利用に影響がでないように対処する方法として有効です。
詳細な手順について紹介します。
 

① certsrv の管理ツールから手動で更新する方法

メンテナンス作業などで Active Directory 証明書サービスが長期間、停止されることが想定される場合、CDP 上の CRL の有効期間が切れないように管理ツールから CRL の更新作業を行います。CRL の更新作業の手順は以下の通りです。

1) CA サーバーに管理者権限をもつユーザーでログオンします。

2) [Windows 管理ツール] より [証明機関] を開きます。

3) certsrv の管理コンソールより、[証明機関(ローカル)] – [<CA 名>] – [失効した証明書] を右クリックして [すべてのタスク] – [公開] をクリックします。

 

4) [CRL の公開] にて、[新しい CRL] を選択した状態として [OK] をクリックします。
※ [OK] をクリックした後、正常に CRL を更新して、CDP に公開できれば何も表示されません。
    特にエラーが表示されない状況であれば、正常に更新が成功したとみなして問題ありません。

 

CRL の有効期間を長く設定して更新する場合

CA の移行作業など、Active Directory 証明書サービスが 1 週間以上停止した状態になる可能性がある場合は、CRL の有効期間を既定の 1 週間以上に延ばして CRL を更新することをおすすめします。CRL の有効期間は、[失効した証明書のプロパティ] より設定変更できます。

CRL を公開する前に有効期間の設定変更すれば、設定変更が反映された有効期間をもつ CRL が公開されます。

 

 CRL の有効期間の延長の注意点

CRL の有効期間は、Windows OS 端末では CRL のキャッシュを保持する期間となります。
CRL を一度ダウンロードすると、CRL 自体の有効期間が切れるまで、Windows OS ではディスク キャッシュとして保存され、次の証明書の検証の時に CDP から CRL はキャッシュせずに、キャッシュを利用して証明書の失効確認を行います。

そのため、CRL の有効期間は必要以上に長く引き伸ばすと、Windows OS は CDP から CRL をダウンロードしない期間が長くなるため、証明機関で新しく失効した証明書を、Windows OS が失効されたと認識できるタイミングが遅くなる可能性があるので注意してください。

 

 

② CA 証明書の秘密鍵を利用して CRL を再署名する方法

停電など何らかの障害で、Active Directory 証明書サービスが長期間停止した状態になった場合、certsrv の管理コンソールから CRL を手動で更新することはできません。その場合、CA 証明書の秘密鍵付きのエクスポート ファイルを利用して、手動で CRL を更新することが可能です。

この作業は Active Directory 証明書サービスを構築している Windows Server OS の端末上で作業する必要はなく、同じドメインに参加しているオンラインの Windows OS 端末であれば、どの端末で作業しても問題ありません。

また、この作業には “CA 証明書の秘密鍵付きのエクスポート ファイル” が必要となります。そのため、事前に CA 証明書の秘密鍵付きのエクスポート ファイルを安全な場所に保存しておいてください。CA 証明書の秘密鍵は、発行する証明書や CRL の署名に利用できるものであるため、万一漏洩したら重大なセキュリティ インシデントとなります。そのため、CA 証明書の秘密鍵は厳重に管理しなくてはならないものということを念頭において、注意して管理してください。

CA 証明書の秘密鍵を利用して、CRL を再署名して CRL の有効期間を延長し、CDP へ公開する手順は以下の通りです。証明機関に障害が発生する前に事前の準備が必要な手順と、障害時に CRL を再署名して有効期間を延長する手順を紹介します。

 

事前準備①:CA 証明書を秘密キー付きでエクスポート

手動で CRL ファイルを再署名(有効期限の更新)を行うために、CA 証明書の秘密鍵が必要となります。
そのため、CA サーバーから CA 証明書を秘密キー付きでエクスポートします。

1) CA サーバーに管理者権限をもつユーザーでログオンします。

2) Windows キーを押しながら R キーを押し、[ファイル名を指定して実行] を開き certlm.msc と入力して [OK] をクリックします。

3) 画面の左ペインより、[証明書 – ローカル コンピューター] – [個人] – [証明書] を展開します。

4) 画面の右ペインより、証明書一覧から CA 証明書を右クリックし、[すべてのタスク] – [エクスポート] を選択します。

※補足: CA 証明書は、発行先と発行元の名前が CA 名となっており、また目的には <すべて> が表示されております。

5) [証明書のエクスポート ウィザードの開始] にて、[次へ] をクリックします。

6) [秘密キーのエクスポート] にて、[はい、秘密キーをエクスポートします] を選択します。

7) [エクスポート ファイルの形式] にて、以下の項目が選択し、[次へ] をクリックします。

 – Personal Information Exchange – PKCS #12 (.PFX)
    – 証明のパスにある証明書を可能であればすべて含む
    – すべての拡張プロパティをエクスポートする

8) [セキュリティ] にて、[パスワード] を選択し、証明書のインポートに使用するパスワードを設定します。

9) [ファイル名] にて、エクスポート ファイルの保存先とファイル名を指定して [次へ] をクリックします。

10) [証明書のエクスポート ウィザードの完了] にて、[完了] をクリックします。

11) [正しくエクスポートされました] というメッセージに対し、[OK] をクリックします。

12) エクスポートされた pfx ファイルを採取します。

 

事前準備②:CRL ファイルの入手

現在、公開している CA サーバーの Base CRL と Delta CRL の情報を取得します。
既定の設定において、CRL ファイルが保存されている場所は以下の通りです。

C:\Windows\System32\certsrv\CertEnroll 配下

Base CRL : <CA 名>.crl
Delta CRL : <CA 名>+.crl

 

上記の 2 つの手順が、CRL の手動更新のために事前に採取が必要なファイルとなります。
CRL のデータは、管理者が証明書を失効するたびにファイルのデータが更新されますので、定期的にバックアップを採取してください。

 

作業ユーザーに CA 証明書を秘密キー付きでインストール

CA サーバーが参加しているドメインと、同じドメインに参加している任意の Windows OS 端末で CRL の有効期間を延長する(=CRL を再署名する)作業を行います。CRL の再署名には、CA 証明書の秘密鍵が必要となりますので、作業するユーザーの [個人] の証明書ストアに秘密鍵付きで証明書をインストールします。

1) CRL の更新作業を行うコンピューター上にログオンします。

2) エクスポートした pfx ファイルをローカルの任意のフォルダに保存します。

3) pfx ファイルをダブルクリックして、証明書のエクスポート ウィザードを開きます。

4) [証明書のエクスポート ウィザードの開始] にて、[保存場所] に “現在のユーザー”を選択し、[次へ] をクリックします。

5) [インポートするファイル] にて、対象のファイルが正しく選択されていることを確認し、[次へ] をクリックします。

6) [パスワード] にエクスポート時に設定したパスワードを設定します。
また、[インポート オプション] に次のオプションが選択されていることを確認し、[次へ] をクリックします。

このキーをエクスポート可能にする
すべての拡張プロパティを含める

7) [証明書ストア] にて、[証明書ストアをすべて次のストアに配置する] を選択し、[個人] を選択して [次へ] をクリックします。

8) [完了] をクリックして、証明書のインポートを完了します。

9) CRL の署名を行う作業ユーザーの [個人] の証明書ストアに CA 証明書が秘密鍵付きで登録されていることを確認します。

 

 

CRL の再署名

秘密鍵付きで CA 証明書をインストールした作業ユーザーでログオンしたままの状態で、引き続き、以下の手順で CRL の再署名を行います。

1) 入手した Base CRL 及び Delta CRL ファイルを任意のフォルダに保存します。

2) cd コマンドで CRL を保存したフォルダに移動します。

3) 次のコマンドを実行します。Base CRL と Delta CRL それぞれに対して実行します。

certutil -sign <以前の CRL ファイルのパス> <新しい CRL ファイル名> <DD:HH>

 

※ <DD:HH> には、延長する日数と時間を指定します。14 日間の有効期限を延長して再署名するには 5:00 と入力します。

例 : certutil -sign c:\temp\old.crl c:\temp\new.crl 14:00

4) 表示されたポップアップから、インポートした CA 証明書を選択して [OK] ボタンを押下します。

5) 正常に再署名が行われた場合、最後に次のような行が出力されます。

CertUtil: -sign コマンドは正常に完了しました。

6) 生成された新しい CRL ファイルをダブルクリックし、[全般] タブの “次の更新予定” のフィールドから、有効期限が延長されていることを確認します。

※ [次の更新予定] は、作業日(8月28日)の 14 日後にあたる 9 月 11 日にセットされています。

 

 

再署名した CRL の公開

証明機関で設定されている CDP に、再署名して有効期間を延長した CRL を公開します。

LDAP パスの CDP について

エンタープライズ CA では、既定で LDAP パスの CDP が設定されています。LDAP パスの CDP へ CRL を公開するには、certutil -dspublish コマンドにより実現できます。

1) 管理者権限でコマンド プロンプトを開きます。

2) 以下のコマンドを実行し、再署名した Base CRL と Delta CRL をそれぞれ公開します。

certutil -dspublish <Base CRL のファイル名>
certutil -dspublish <Delta CRL のファイル名>

コマンド実行例:
certutil -dspublish c:\temp\new.crl
certutil -dspublish c:\temp\new+.crl

 

HTTP パスの CDP について

生成された新しい CRL ファイルのファイル名を、証明書の CRL 配布ポイントに記載されているファイル名に変更し (もともとの CRL のファイル名に変更し)、CRL 配布ポイントの Web サーバーの仮想ディレクトリの物理フォルダに配置します。

 

CDP の HTTP パスの Web サーバーが、証明機関を構築しているサーバーと同じである場合は CDP もダウンしているので、この作業は不要です。LDAP パスのみに対して、再署名した CRL のファイルを公開してください。

 

CRL の再署名、CRL の公開の作業が完了したら、秘密鍵付きでインストールした CA 証明書は削除しましょう。
 
以下の手順で、CA 証明書と秘密鍵を削除します。

1) 対象のユーザーの権限でコマンド プロンプトを開きます。
2) 以下のコマンドを実行し、ユーザーの個人の証明書ストアに登録されている一覧の情報を表示します。

certutil -store -user my

C:\Users\Administrator>certutil -store -user my
my “個人”
================ 証明書 0 ================
シリアル番号: 5831595720e192b74017fe8920cd6435
発行者: CN=test01-TEST01DC01-CA, DC=test01, DC=local
この日以降: 2020/03/13 12:24
この日以前: 2025/03/13 12:34
サブジェクト: CN=test01-TEST01DC01-CA, DC=test01, DC=local
CA バージョン: V0.0
署名は公開キーと一致します
ルート証明書: サブジェクトと発行者は一致します
Cert ハッシュ(sha1): 7c 9c 5e 1a f3 d1 f7 13 f3 63 f3 8e 21 98 ae b1 d5 ce 75 21
キー コンテナー = test01-TEST01DC01-CA
一意なコンテナー名: ea5e81882f4c0c028e2a55bd04d1a73e_f6b9b341-abec-46bb-9913-811b070609fa
プロバイダー = Microsoft Software Key Storage Provider
秘密キーはエクスポート可能ではありません
署名テストに合格しました
CertUtil: -store コマンドは正常に完了しました。

 

3) 削除対象の証明書の “Cert ハッシュ(sha1)”、”キー コンテナー”、”プロバイダー” の値を確認します。
4) 以下のコマンドを実行して、対象の証明書を削除します。

certutil -delstore -user my “<拇印>”

実行例:
certutil -delstore -user my “7c 9c 5e 1a f3 d1 f7 13 f3 63 f3 8e 21 98 ae b1 d5 ce 75 21”

5) 以下のコマンドを実行して、証明書のキーペアとなる秘密鍵を削除します。

certutil -user -csp “<プロバイダー>” -delkey “<キー コンテナー>”

実行例:
certutil -user -csp “Microsoft Software Key Storage Provider” -delkey “test01-TEST01DC01-CA”