はじめに
AD CS を構築した直後には、失効リスト (CRL) は、「ファイル共有」のアドレスが構成されています。
ファイル共有は、当然 Windows の認証が掛かっているので、ドメイン外のサーバーからアクセスした場合には認証が必要となります。
私の場合は、NPS サーバーと ドメイン外の AD CS(スタンドアロンCA)を組み合わせて、クライアント証明書の失効確認を構成したかったのですが、以下のエラー「失効サーバーがオフラインだったため、失効関数は失効を確認できませんでした。」のエラーが出ました。このエラーが厄介でして、エクスプローラーから CRL (ファイル共有) を参照した場合、NTLM 認証のおかげで参照ができますが、NPS のサービスを実行しているアカウントが、ローカルアカウントであるために、ドメイン外の ファイル共有 を参照できない状況が発生します。この差に気づけないと立ち往生でハマります。
(NPS サーバーのイベントログ)
そのため、失効リストを「HTTP 匿名アクセス」へ変更することにより、ドメイン外のホストからでも問題なく参照できるようになり、解決策となります。
この記事では、失効リストを 既定の「ファイル共有」から「HTTP 匿名アクセス」へ構成変更する手順を紹介したいと思います。
1. AD CS と 証明機関 Web 登録 の構成
AD CS の オプション「証明機関 Web 登録」を導入します。
これが導入されていれば、CertEnroll という仮想フォルダが自動作成されます。
このフォルダが、「HTTP 匿名アクセス」の公開場所になります。
以下の手順の実施にて、AD CS 導入 と 証明機関 Web 登録 の導入ができます。
AD CS 導入済みの場合は、証明機関 Web 登録 だけ 追加導入してください。
※本記事の手順では、スタンドアロン CA を想定しています。
2. CRL 配布ポイントの再構成
2-1. 問題点
証明機関 Web 登録 を導入することにより、CertEnroll の仮想フォルダが作成されるのですが、これだけでは 証明書の失効リストの構成としては十分ではありません。
このままでは、発行された証明書に記載されている「CRL」の値が 変更されないため、証明書をチェックするホストは「ファイル共有」の方を参照してしまいます。
2-2. CRL 配布ポイントの変更手順
- 「サーバーマネージャ」の「ツール」から「証明機関」を開く
- 証明機関の名前を右クリックして、プロパティを開く
- 拡張機能 のタブを開き「http://」の行を選択します。すると、以下の赤枠の2か所が空欄になっているため、チェックを入れます。
- CRL に含め、クライアントはこれを使って Delta CRL の場所を検索する
- 発行された証明書の CDP 拡張機能に含める
4.続いて「file://」や「ldap://」 の行のチェックは外します。
5.以下のメッセージには「はい」で応答し、サービスを再起動します。
2-3. 証明書の再発行
このタイミングで、証明書 の再作成を行うことで、CRL 配布ポイントが「HTTP 匿名アクセス」に更新されます。
2-3-1. 証明書 の発行手順
証明書は、以下の手順を参考に、再度 発行してください。
2-3-2. 証明書再発行後の CRL 配布ポイント
再発行された証明書を確認すると、下図のように、配布ポイントが「http://」に変更されています。
2-3-3. 証明書の配布
CRL が HTTP に更新された証明書を、各ホストに配布しなおしてください。
※(旧)証明書の削除と、(新)証明書のインポート
証明書の削除や確認は、certlm.msc (コンピューター証明書の場合) と、certmgr.msc (ユーザー証明書の場合) のツールを活用してください。
2-4. キャッシュのクリア
旧証明書で証明書の失効確認が行われていると、新しい証明書に差し替えても、キャッシュが残っていて、古い CRL のまま、失効確認が行われてしまいます。
そのため、以下のコマンドを実行して、CRL のキャッシュをクリアしてください。
クライアント証明書の失効確認のキャッシュは、認証サーバー側(NPS サーバー等)、 サーバー証明書の失効確認のキャッシュは クライアントPC 側でのクリアが必要です。
必ず、コマンドプロンプト(管理者)を使って、コマンド ① と ② を続けて実行してください。
※PowerShell だと、コマンド ① は動作しますが、コマンド ② が動きません(私は、これでハマりました)
(コマンド ①)
certutil -urlcache * delete
(コマンド ②)
certutil -setreg chain\ChainCacheResyncFiletime @Now