AD CS 証明書失効リストを HTTP 匿名アクセスに構成変更する

# はじめに
AD CS を構築した直後には、失効リスト (CRL) は、「ファイル共有」のアドレスが構成されています。
ファイル共有は、当然 Windows の認証が掛かっているので、ドメイン外のサーバーからアクセスした場合には認証が必要となります。

私の場合は、NPS サーバーと ドメイン外の AD CS（スタンドアロンCA）を組み合わせて、クライアント証明書の失効確認を構成したかったのですが、以下のエラー「失効サーバーがオフラインだったため、失効関数は失効を確認できませんでした。」のエラーが出ました。このエラーが厄介でして、エクスプローラーから CRL (ファイル共有) を参照した場合、NTLM 認証のおかげで参照ができますが、NPS のサービスを実行しているアカウントが、ローカルアカウントであるために、ドメイン外の ファイル共有 を参照できない状況が発生します。この差に気づけないと立ち往生でハマります。
（NPS サーバーのイベントログ）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1619637/62566de2-cff7-76e9-8cfd-ddc2524f7834.png)

そのため、失効リストを「HTTP 匿名アクセス」へ変更することにより、ドメイン外のホストからでも問題なく参照できるようになり、解決策となります。

この記事では、失効リストを 既定の「ファイル共有」から「HTTP 匿名アクセス」へ構成変更する手順を紹介したいと思います。

# 1. AD CS と 証明機関 Web 登録 の構成
AD CS の オプション「証明機関 Web 登録」を導入します。
これが導入されていれば、CertEnroll という仮想フォルダが自動作成されます。
このフォルダが、「HTTP 匿名アクセス」の公開場所になります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1619637/6ff75a46-9ee3-1dc8-caa5-e176e2fc25f5.png)

以下の手順の実施にて、AD CS 導入 と 証明機関 Web 登録 の導入ができます。
AD CS 導入済みの場合は、証明機関 Web 登録 だけ 追加導入してください。
※本記事の手順では、スタンドアロン CA を想定しています。

https://qiita.com/carol0226/items/cb38ed3188c520bd9d64

# 2. CRL 配布ポイントの再構成
## 2-1. 問題点
証明機関 Web 登録 を導入することにより、CertEnroll の仮想フォルダが作成されるのですが、これだけでは 証明書の失効リストの構成としては十分ではありません。
このままでは、発行された証明書に記載されている「CRL」の値が 変更されないため、証明書をチェックするホストは「ファイル共有」の方を参照してしまいます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1619637/d0622fb3-6333-ef35-20bd-08c997652087.png)

## 2-2. CRL 配布ポイントの変更手順
0. 「サーバーマネージャ」の「ツール」から「証明機関」を開く
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1619637/9d736b48-9d1b-5faf-07a4-a36b591113cd.png)
　<br>
0. 証明機関の名前を右クリックして、プロパティを開く
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1619637/4e208989-a91c-7ac0-3594-d4a6986d88cd.png)
　<br>
0. 拡張機能 のタブを開き「http://」の行を選択します。すると、以下の赤枠の２か所が空欄になっているため、チェックを入れます。
- CRL に含め、クライアントはこれを使って Delta CRL の場所を検索する
- 発行された証明書の CDP 拡張機能に含める

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1619637/81624e4e-0e45-0ea8-3ea1-e3ff1c57a2d3.png)

4．続いて「file://」や「ldap://」 の行のチェックは外します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1619637/254c594a-0a54-5ef9-78aa-f31c478ff115.png)

5．以下のメッセージには「はい」で応答し、サービスを再起動します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1619637/7960a00c-2d1b-0ea9-c9f8-1b0b43634a62.png)

## 2-3. 証明書の再発行
このタイミングで、証明書 の再作成を行うことで、CRL 配布ポイントが「HTTP 匿名アクセス」に更新されます。

### 2-3-1. 証明書 の発行手順
証明書は、以下の手順を参考に、再度 発行してください。

https://qiita.com/carol0226/items/ba5c9eb1ff0f27e8be3b

https://qiita.com/carol0226/items/e3482e03df636f4a689b

### 2-3-2. 証明書再発行後の CRL 配布ポイント
再発行された証明書を確認すると、下図のように、配布ポイントが「http://」に変更されています。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1619637/2478e759-198b-45fd-fb71-a53bff915701.png)

### 2-3-3. 証明書の配布
CRL が HTTP に更新された証明書を、各ホストに配布しなおしてください。
※(旧)証明書の削除と、(新)証明書のインポート

証明書の削除や確認は、certlm.msc (コンピューター証明書の場合) と、certmgr.msc (ユーザー証明書の場合) のツールを活用してください。

# 2-4. キャッシュのクリア
旧証明書で証明書の失効確認が行われていると、新しい証明書に差し替えても、キャッシュが残っていて、古い CRL のまま、失効確認が行われてしまいます。
そのため、以下のコマンドを実行して、CRL のキャッシュをクリアしてください。

クライアント証明書の失効確認のキャッシュは、認証サーバー側（NPS サーバー等）、 サーバー証明書の失効確認のキャッシュは クライアントPC 側でのクリアが必要です。

必ず、コマンドプロンプト（管理者）を使って、コマンド ① と ② を続けて実行してください。
※PowerShell だと、コマンド ① は動作しますが、コマンド ② が動きません（私は、これでハマりました）

（コマンド ①）
~~~
certutil -urlcache * delete
~~~
（実行結果 ①）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1619637/58a0f93e-c9f1-8d68-2c67-9c9e4a00ee7d.png)

（コマンド ②）
~~~
certutil -setreg chain\ChainCacheResyncFiletime @Now
~~~
（実行結果 ②）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1619637/e472e515-7063-76de-8e0d-b4a8837f21bc.png)