【AD CS】証明書失効リスト(CRL)の有効期間の日付の算出の仕組みについて

  • 2022年2月27日
  • 2022年3月11日
  • AD CS, PKI

AD CS で構築した証明機関では、Base CRL と Delta CRL の 2 つの CRL が発行されます。
Base CRL の有効期間は既定で 7 日、Delta CRL の有効期間は既定で 1 日となります。
CRL の詳細については、以下の記事で紹介しております。

関連記事

証明書失効リスト(CRL)は、証明機関で発行された証明書の中で失効した証明書の一覧を記載したものです。 証明書の正当性を検証するときに、証明書に記載されている CDP から CRL を取得して、証明書が失効されていないか確認します。 今[…]

このように CRL には有効期間が設定されており、CRL には有効期限に関する項目が定義されています。
今回は、CRL の有効期間の項目にセットされる日付の計算式について紹介します。

 

CRL の有効期間

AD CS で構築した証明機関(CA)には、Base CRL と Delta CRL の 2 つの CRL が発行されます。
Base CRL と Delta CRL の有効期間の設定は、以下の管理画面で確認、設定変更できます。

1) CA サーバーに管理者権限をもつユーザーでログオンします。
2) [Windows 管理ツール] より [証明機関] を開きます。
3) certsrv の画面の左ペインを展開し、[証明機関 (ローカル)] – [<CA 名>] – [失効した証明書] を右クリックして [プロパティ] をクリックします。

 

また、[失効した証明書のプロパティ] 画面の [CRL の表示] タブでは、公開中の CRL を確認できます。
CRL には有効期間に関する項目として、以下の 3 つの項目があります。

有効開始日: CRL の有効性が開始する日時
次の更新予定: CRL の有効性が終了して、この CRL で証明書の失効確認が行えなくなる日時
次の CRL 発行: 証明機関が次に CRL を発行する日時

各項目における CRL の有効期間や更新日について、図説すると以下の通りです。

 

実質的な CRL の有効期間は [有効開始日] ~ [次の更新予定] となります。
その期間は CRL は有効とみなされ、その CRL を利用して証明機関から発行された証明書の失効確認を行えます。

CRL の中身を確認してみると、CRL の有効期間の長さは、ぴったり 7 日間(=168 時間)ではないことがわかります。 実際に CRL が更新される間隔は “168 時間” ですが、発行される CRL の有効期限は次に CRL が更新する日時よりも先の日時がセットされます。これは CRL が更新されても、すぐに更新前の CRL が利用不可とならないように猶予期間をもたせるためです。

CRL を更新した後に、すぐに前の CRL の有効期限が切れてしまうと、証明書の失効確認に失敗する問題が発生する可能性が高いです。AD CS で構築した CA では、CRL を公開している CDP には、ドメイン コントローラーの構成パーティションを参照する LDAP パスが含まれます。

ドメイン内にドメイン コントローラーが複数台ある場合、更新した CRL が全台のドメイン コントローラーに複製されるまでに時間がかかることがあります。CRL 更新のタイミングで、前の CRL の有効期限がきれてしまうと、新しい CRL が複製されていないドメイン コントローラーにアクセスしたクライアント端末では証明書の失効確認が失敗します。
そのため、ドメイン コントローラーの複製にかかる時間も考慮して、CRL の有効期限は猶予期間を加算してセットされます。

 

CRL の有効期間の図を見てみると、CRL の更新のタイミングと、有効開始日がずれていることがわかります。
CRL の有効開始日は、実際に CRL が更新された日時よりも前の時間がセットされます。(既定は 10 分前)
これは、証明書を利用する端末の OS のシステム時刻ずれによる影響を緩衝するために、有効期間に clock skew を加えています。

 

CRL に関するレジストリ設定

Base CRL と Delta CRL の有効期間に関するレジストリ設定値を紹介します。
CA 構成に関するレジストリには、有効期間に関連するレジストリ値が定義されています。

キー:HKLM\SYSTEM\CurrentControlSet\Services\CertSvc\Configuration\<CA 名>

説明

既定値

CRLPeriod(*)

Base CRL の公開期間の数字の単位

Days

CRLPeriodUnits(*)

Base CRL の公開期間の数字

7

CRLDeltaPeriod(*)

 Delta CRL の公開期間の数字の単位

Days

CRLDeltaPeriodUnits(*)

Delta CRL の公開期間の数字

1

CRLOverlapPeriod

Base CRL の猶予期間の数字の単位

Hours

CRLOverlapUnits

Base CRL の猶予期間の数字

0

CRLDeltaOverlapPeriod

Delta CRL の猶予期間の数字の単位

Minutes

CRLDeltaOverlapUnits

Delta CRL の猶予期間の数字

0

ClockSkewMinutes

clock skew の時間(分)

0xa

 

(*)は [失効した証明書のプロパティ] 画面の [公開期間] の設定値を管理するレジストリ値です。

ClockSkewMinutes で定義している数値の単位はです。
ClockSkewMinutes の既定値は 0xa ですので、clock skew は 10 分が既定値となります。

 

CRL の[有効開始日]

CRL の [有効開始日] は、その CRL の有効性が開始される日時がセットされています。
[有効開始日] は以下の通りに決まります。

[有効開始日] = CRL を更新した日時 – ClockSkewMinutes
CRL を更新した日時から ClockSkewMinutes(既定 10 分)を引いた日時が [有効開始日] となります。
例えば、CRL が更新された日時が 2022 年 2 月 27 日 1:17:13 を想定します。
その場合、[有効開始日] は 10 分前の 2022 年 2 月 27 日 1:07:13 となります。
 
 

CRL の [次の CRL 発行]

CRL の [次の CRL 発行] は、次の CRL が更新される日時がセットされています。
[次の CRL 発行] は “CRL の有効期限” ではありません。
また、[次の CRL 発行] は CRL の拡張項目であり、CRL の必須項目ではありません。
[次の CRL 発行] は以下の通りに決まります。

[次の CRL 発行] = CRL を更新した日時 + [公開期間]
CRL を更新した日時に [公開期間] を足した日時が [次の CRL 発行] となります。
例えば、CRL が更新された日時が 2022 年 2 月 27 日 1:17:13 を想定します。
その場合、[次の CRL 発行] は 7 日後の 2022 年 3 月 6 日 1:17:13 となります。
実際に、次に証明機関が CRL を更新する日時は、 2022 年 3 月 6 日 1:17:13 です。
 

CRL の[次の更新期間]

CRL の [次の更新期間] は、CRL の有効期限の日時がセットされています。
AD CS における [次の更新期間] は、”次に CRL が更新される日時” ではありません。
[次の更新期間] は以下の通りに決まります。

[次の更新期間] = [次の CRL 発行] + [猶予期間]
 

[次の CRL 発行] の日時 [猶予期間] を足した日時が [次の更新期間] となります。
[猶予期間] の値は、レジストリの設定値により計算式が異なります。
CRLOverlapUnits と CRLOverlapPeriod で表現される期間が有効かどうかで [猶予期間] の計算式が決まります。

具体的には、0 や マイナスの値の場合は、”期間” として有効な値ではありません。
また、10 分や 2 時間、3 日など、”期間” の表現として有効な値であれば、有効とみなされます。
既定値だと、CRLOverlapUnits と CRLOverlapPeriod で表現される期間は 0 分であるため、有効な値としてみなされません。
そのため、計算式②により、[猶予期間] の長さが計算されます。

 

① 期間が有効な値である場合

CRLOverlapUnits と CRLOverlapPeriod で表現された期間が有効である場合の計算式は以下の通りです。
CRL の有効期限に与える有効期間の長さを指定したい場合は、このレジストリ設定を変更します。

[猶予期間] = CRLOverlapUnits + ClockSkewMinutes

 

例えば、レジストリにて、CRLOverlapUnits が 30、CRLOverlapPeriod が Minutes と定義されていたと想定します。
その場合、[猶予期間] は 30 分 + 10 分 で 40 分となります。

また、[次の CRL 発行] が 2022 年 3 月 6 日 1:17:13 とセットされていたと想定します。
[次の更新期間] は [猶予期間] の 40 分を足した 2022 年 3 月 6 日 1:47:13 となります。
この CRL の有効期限は 2022 年 3 月 6 日 1:47:13 です。

 

② 期間が有効な値でない場合

CRLOverlapUnits と CRLOverlapPeriod で表現された期間が有効である場合の計算式は以下の通りです。
[猶予期間] の計算式に、変数 InterimBaseCRLOverlap を利用します。
以下の 1 ~ 4 の計算式が順に行われます。

1. InterimBaseCRLOverlap = MinimumOf(0.1 × [公開期間], 12 時間)
2. InterimBaseCRLOverlap = MaximumOf(InterimBaseCRLOverlap, 1.5 × ClockSkewMinutes)
3. InterimBaseCRLOverlap = MinimumOf(InterimBaseCRLOverlap, [公開期間])
4. InterimBaseCRLOverlap = InterimBaseCRLOverlap + ClockSkewMinutes

 

例えば、公開期間が 7 日に設定されている場合における [猶予期間] を計算します。

1. InterimBaseCRLOverlap = MinimumOf(0.1 × [公開期間], 12 時間)
以下の計算式にそって、変数 InterimBaseCRLOverlap の初期値が設定されます。

InterimBaseCRLOverlap = MinimumOf(0.1 × 7 日(=168 時間), 12 時間) = MinimumOf(16.8 時間, 12 hours)

MinimumOf は () 内の値を比較して、一番小さい値を選択する関数です。
そのため、変数 InterimBaseCRLOverlap の値は以下となります。

InterimBaseCRLOverlap = 12 時間

 

2. InterimBaseCRLOverlap = MaximumOf(InterimBaseCRLOverlap, 1.5 × ClockSkewMinutes)
以下の計算式にそって、変数 InterimBaseCRLOverlap の値を更新します。

InterimBaseCRLOverlap = MaximumOf(12 時間, 1.5 × 10分) = MaximumOf(12 時間, 15 分)

MaximumOf は () 内の値を比較して、一番大きい値を選択する関数です。
そのため、変数 InterimBaseCRLOverlap の値は以下となります。

InterimBaseCRLOverlap = 12 時間

3. InterimBaseCRLOverlap = MinimumOf(InterimBaseCRLOverlap, [公開期間])
以下の計算式にそって、変数 InterimBaseCRLOverlap の値を更新します。

InterimBaseCRLOverlap = MinimumOf(12 時間, 168 時間) = 12 時間

4. InterimBaseCRLOverlap = InterimBaseCRLOverlap + ClockSkewMinutes
以下の計算式にそって、変数 InterimBaseCRLOverlap の値を更新します。

InterimBaseCRLOverlap = 12 時間 + 10 分 = 12 時間 10 分

1 ~ 4 の計算の結果、[猶予期間] は 12 時間 10 分に算出されます。

例えば、CRL が更新された日時が 2022 年 2 月 27 日 1:17:13 を想定します。
その場合、[次の CRL 発行] は 7 日後の 2022 年 3 月 6 日 1:17:13 となります。
[次の更新期間] は [次の CRL 発行] に 12 時間 10 分を加えた、2022 年 3 月 6 日 13:27:13 です。

 

Delta CRL の場合においても、[有効開始日]、[次の CRL 更新]、[次の更新期間] の計算式は同じです。
[次の更新期間] の計算においては、CRLDeltaOverlapPeriodCRLDeltaOverlapUnits が参照されます。

 

証明機関で発行される CRL の有効期間は、CA 証明書の有効期間の範囲内となります。
CA 証明書の有効期間を超える場合は、CRL の有効期間が丸めこまれます。