証明書発行に失敗

SSL、IPSec、EFSなどなど、様々な場面で利用することの多い自社運用の認証局。Windows Serverでは、Active Directory証明書サービス(ADCS)という名前でサービスが提供され、実装することができますが、最近はフェデレーションを実装するときにも証明書が必要になってきているので、何かと利用することも多いのではないでしょうか?
今日は、ADCSでハマったことがあったので、書き留めておこうと思います。

ある日、SSL用の証明書をADCSから発行しようとしたところ、”失効サーバーがオフラインのため、失効の関数は失効を確認できませんでした”というエラーメッセージが出てきました。何度か再実行したのですが、同じ結果になったので、何が問題なのか調べてみることにしました。

ADCS20110504-1

まず、「失効サーバーがオフラインのため、失効の関数は失効を確認できませんでした」のメッセージは基本的に、証明書の発行要求をするときに、失効サーバー(CRLを管理するサーバー)にアクセスできないことが原因で表示されます。
失効サーバーはCRL公開ポイント(CDP)という名前で定義され、既定ではADCSのサーバーと同一のサーバーがCDPとなります。また、CDPへのアクセスもLDAP、HTTP、SMBなど用意されているので、既定の設定を変更していない限り、CDPにはアクセスできているはずです。(CDPへのネットワークアクセスが正しく行われているか、細かく確認したい場合にはWireSharkを利用するのもひとつの方法でしょう)

続いて、CRLそのものの設定はどうなっているのかな?と思い、[スタート]-[管理ツール]-[証明機関]から[失効した証明書]のプロパティを開いてみました。すると、以下のような画面が表示されるのですが、Delta CRLが更新の時間を過ぎている([CRL公開のパラメーター]タブで確認可能)のに、Delta CRLが公開されていない([CRLの表示]タブで確認可能)ことが確認できました。
(すみません、下の画面はエラーが発生した時の画面ではありません。エラー発生時はDelta CRLはまだ作られていないことを表す表示になっていました。)
ADCS20110504-2

ADCS20110504-4

そこで、ADCSのサービスを再起動すると、Delta CRLは自動的に生成され、無事に公開されるようになりました。

ADCS20110504-3

そして、再びSSL証明書の発行要求を行うと、今度は無事に証明書が発行されました。

なぜ、このような問題が発生したのかということについてですが、私が推測するに
仮想環境でADCSを動かしていることが原因なのではないかと思っています。
仮想環境だと、仮想マシンの起動と停止が簡単にできます。
そのため、仮想マシンをしばらくの間停止していると、Delta CRLは公開するタイミングを逃してしまい、
公開しなければならないCRLが公開されず、今回のようなエラーになったのだと思います。
このように、仮想マシンを使って様々なサービスを動かすと思いもよらないトラブルに巻き込まれることが
ありますが、ADCSにもこんな落とし穴があったのですね。