証明書失効リスト(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 のサービス停止の影響
- 証明書チェーンが構成できる
- 証明書の失効確認が行える
証明書を利用できるには、証明書が検証できれば問題ありません。
証明書の検証の処理として、具体的な仕組みについては、以下の記事で紹介しております。
証明書はコンピューターやユーザーの身分を証明するためのものです。 ただし、インターネット上の身元のわからない相手から提示された証明書の正当なのかどうかわかりません。 通信相手から提示された証明書が、本当に信頼してよいのかを判断するために[…]
証明機関が利用不可でも、発行済みの証明書は利用できますが、証明機関が利用できない場合の影響は以下の 3 点です。
- 証明書が新規発行できない
- 証明書の失効できない
- CRL(証明書失効リスト) を更新できない
対処策:CRL の更新
① 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 の有効期間は、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 それぞれに対して実行します。
※ <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 <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 のファイルを公開してください。
1) 対象のユーザーの権限でコマンド プロンプトを開きます。
2) 以下のコマンドを実行し、ユーザーの個人の証明書ストアに登録されている一覧の情報を表示します。
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”