【AD CS】任意のクライアントPCに証明書を自動配布する

# はじめに
皆さんは、「クライアント証明書」の運用方法について、どのような検討を実施しておりますでしょうか。
検討といっても「配布」、「更新」、「失効」、「管理」等様々な観点で検討を実施しているかと思いますが、1つ1つ手作業で運用したり、サードパーティー製の製品にて運用を実現した場合、工数や費用面での課題が発生するかと思います。
様々な方式が存在する中で、本記事ではWindows Server OSの機能の利用に絞った方式を1つご紹介します。具体的には、Active Directory 証明書サービス (以下 AD CS)を利用し、クライアント証明書の「配布」と「更新」を自動化し、かつ配布先のクライアントPCを制御する方式についてご紹介します。
なお、今回の記事にてご紹介するのは、クライアント証明書の中でも、コンピュータ証明書となります。
※ 本ブログに記載した内容は個人の見解であり、所属する会社、組織とは全く関係ありません。




# 自動化することによるメリットについて
クライアント証明書を端末に登録する作業を手作業で1台ずつ実施するのは工数が膨らむかと思います。また、人間はミスをする生き物・・・クライアント証明書を配布する端末の数が増えれば増えるほど作業ミスによる品質の低下のリスクも上がってしまいます。

:::note info
クライアント証明書配布自動化の設定を実施することで、自動配布はもちろんのこと、自動的に証明書の更新まで実施してくれます。手作業が発生しないため、作業ミスを回避可能です。
:::






# 目次
[1.利用する機能の整理](#1-利用する機能の整理)
[2.構成図](#2-構成図)
[3.AD CSによるクライアント証明書自動配布・更新のイメージ](#3-ad-csによるクライアント証明書自動配布更新のイメージ)
[4.設定手順](#4-設定手順)
[5.クライアント証明書が自動配布されたことを確認する](#5-クライアント証明書が自動配布されたことを確認する)
[6.終わりに](#6-終わりに)
[7.参考文献](#7-参考文献)




# 1. 利用する機能の整理
今回紹介する方法を実施する中で、設定が必要な各種機能について以下に整理します。

・クライアント証明書
　大きく分けてユーザ証明書とコンピュータ証明書の2種類があり、ユーザ証明書はユーザの信用性を保証、コンピュータ証明書は端末の信用性を保証する証明書となります。

  ・[CA（証明機関）](https://learn.microsoft.com/ja-jp/windows-server/identity/ad-cs/certification-authority-role "CA")
  　ユーザー、コンピューター、および組織の ID を証明する役割を持ち、それらを証明するための証明書を発行する機関となります。なお、発行だけでなく、証明書の管理、取消、更新も可能です。Windows ServerにCAを構築する場合、AD CS（Active Directory 証明書サービス）の証明機関役割サービスをインストールすることが必要です。

 ・[AD CS（Active Directory 証明書サービス）](https://learn.microsoft.com/ja-jp/windows-server/identity/ad-cs/active-directory-certificate-services-overview "AD CS")
　ユーザー、コンピューター、サービスに証明書を発行する機能を持つサービスとなります。本サービスを利用することで、CA（証明機関）を構築することが出来ます。なお、自動でクライアント証明書を発行するためには、AD CSの [エンタープライズ CA](https://learn.microsoft.com/ja-jp/windows-server/identity/ad-cs/certification-authority-role#enterprise-and-standalone-certification-authorities "エンタープライズ CA")を使用する必要があります。Micsosoftにも構築手順の記載がございますが、画像キャプチャが添付されておらず理解しづらいため、適宜別サイトをご参照ください。

・[AD DS（Active Directory ドメインサービス）](https://learn.microsoft.com/ja-jp/windows-server/identity/ad-ds/get-started/virtual-dc/active-directory-domain-services-overview "AD DS")
　ユーザーアカウント、コンピューターアカウント、グループ、セキュリティポリシー等を一元管理することを可能とするサービスになります。例えば、大規模なシステムの運用を実施する際、大量の端末のセキュリティルールやアカウント等をまとめて管理する必要が発生した場合、本サービスを利用することで、1台ずつ設定等を実施せずとも管理することが可能となります。
 なお、AD CSが自動でクライアント証明書を発行するためには、AD DSとの連携が必須になります。　 [こちらが構築手順となります。「AD DS をインストールする」をご確認ください](https://learn.microsoft.com/ja-jp/windows-server/identity/ad-ds/deploy/install-active-directory-domain-services--level-100-/ "構築手順")

 :::note alert
スタンドアロン CAではクライアント証明書の自動発行（自動登録）は出来ません。[★参考](https://learn.microsoft.com/ja-jp/training/modules/implement-manage-active-directory-certificate-services/3-design-implement-ad-cs "参考")
:::
:::note warn
・AD CSのインストール後にドメイン参加は不可となります。インストール前にドメイン参加作業を実施してください。
:::

# 2. 構成図
今回の方法を実装する上での構成図を以下に整理しました。
＜前提条件＞
・検証環境の都合上、すべてのリソースはAzure上に展開しています。
・サーバはWindows Server 2022、クライアントPCはWindows 10、Windows 11を利用します。
・2台のWindows Serverには1台にAD DS、もう1台にAD CSをインストールしています。
・クライアントPCはサーバと同じドメインに参加させており、各々がドメイン通信可能な状態です。
 
 :::note warn
AD CS と AD DS を１つのサーバー上に同居させることは、Microsoft 非推奨の構成となります。 実際に設計を実施する際は、今回の構成のようにAD DSとAD CSを分けて構築を実施してください。
同居させた場合、単一サービス障害発生時のリカバリ手順が複雑になります。
[★参考](https://jpwinsup.github.io/blog/2023/10/23/ActiveDirectory/Authentication/design-consideration/ "参考")
:::

### ★クライアント証明書配布のための構成
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3739048/8091004f-8de4-c837-b871-5c9e9867eb11.png)






# 3. AD CSによるクライアント証明書自動配布・更新のイメージ
AD CSによるクライアント証明書自動配布・更新のイメージを以下に整理しました。

### ★配布イメージ
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3739048/2e864d0c-8c18-3789-bc72-3b894f68b3ef.png)

### ★更新イメージ
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3739048/34a3302b-bbfd-76c5-a61d-fed65e83d13d.png)






# 4. 設定手順
以下の2つの手順について整理します

:::note info
・本手順ではAD DS、AD CS、ドメイン参加作業は割愛します。
・クライアント証明書の中でも、コンピュータ証明書を配布する手順とします。
:::
・クライアント証明書を"配布する側"の設定手順
　<概要>
 　・AD DSがインストールされたサーバの端末にてクライアント証明書自動配布を実施するグループを作成します。
  　・「証明機関」にクライアント証明書自動配布のための証明書テンプレートを登録します。

・クライアント証明書が"配布される側"の設定手順
　<概要>
　・AD CSがインストールされたサーバの端末にて、クライアント証明書の配布対象のみで構成されるOU（組織単位）を作成します。
 　・作成したOUに紐つくGPO（グループポリシーオブジェクト）について、証明書自動配布のための設定を実施します。




### ★クライアント証明書を"配布する側"の設定手順
・AD DSがインストールされたサーバの端末にログイン後、「サーバーマネージャ」⇒「ツール」⇒「Active Directoryユーザとコンピュータ」を押下します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3739048/8ba24aa5-18a8-1d6e-77dd-c349319a6c5a.png)

・「Users」を押下し、赤枠のグループアイコンを押下します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3739048/7333e79f-055f-2019-bfce-b668a633e7af.png)


・グループ名を入力し、「OK」を押下します。
　（自動配布する側のオブジェクト専用のグループとなります）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3739048/c5d2feda-dedb-2f1d-bbc7-b32e2299ed0c.png)


:::note info
・グループ名に指定はありません。
・グループのスコープは要件に応じて変更をお願いいたします。
:::

・作成したグループを右クリックし、「プロパティ」を押下します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3739048/2f01237c-2a34-9de2-780c-8f1b946ca78d.png)

・「メンバー」タブから「追加」を押下します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3739048/8244fc8c-b640-6f1f-03b6-71d152dc2cee.png)

・「オブジェクトの種類」を押下します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3739048/45517753-5510-15e5-e87c-046472f7ae60.png)

・「コンピュータ」のみを選択し、「OK」を押下します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3739048/41916783-6b5d-3941-21c5-53bf910577b9.png)

・「詳細設定」を押下します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3739048/7e900847-83da-c11b-e34f-05adc1e0cad4.png)

・「検索」を押下後、クライアント証明書配布対象のコンピュータオブジェクトを選択し、「OK」を押下します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3739048/f7032c95-668a-9c74-e548-06a74f9b399b.png)

:::note info
今回は「Testcomputer1」、「Testcomputer2」のみにクライアント証明書を配布する想定で構築します。
:::

・「OK」を押下します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3739048/52706e93-2c6f-8c83-8809-ea0e2b6e18d3.png)


:::note warn
以下の手順から操作する端末が「AD CSがインストールされたサーバ」に変わります。
:::


・AD CSがインストールされたサーバにログイン後、「サーバーマネージャ」⇒「ツール」⇒「証明機関」を押下します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3739048/043d970b-a964-51ec-a5d1-9f45b6983fcf.png)

・「証明書テンプレート」⇒「管理」を押下します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3739048/e8b0a4d3-9598-9ee8-c1de-187095a3a983.png)

・証明書テンプレートコンソールの「コンピュータ」を右クリックし、「テンプレートの複製」を押下します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3739048/28b0fabe-d10b-f1d3-6489-133d2cedc746.png)

・「全般」タブの「テンプレート表示名」にテンプレート名を記入します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3739048/a5e895b2-d7aa-7fbd-365d-119b785f02ce.png)

:::note info
・テンプレート名に指定はありません。
・本画面で配布されるクライアント証明書の有効期間と更新期間（有効期限のどれだけ前から自動更新を行うか）が設定可能です。
:::

・「セキュリティ」タブの「追加」を押下し、上記で作成したグループ（今回は「Automated Distribution」）を追加する。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3739048/82ef03f6-19c5-ef1a-a678-dea34f3e393c.png)

・追加したグループのアクセス許可の「許可」について、「読み取り」、「登録」、「自動登録」を選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3739048/fa68962f-dcad-6cad-310b-61729fa2d95e.png)

・追加したグループ以外のグループまたはユーザについては、「登録」、「自動登録」を削除します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3739048/85c3d31e-92ee-a21a-0b8a-d555b35945b8.png)

:::note warn
「書き込み」まで削除すると、当該証明書テンプレートが編集不可となります。
:::

・「OK」を押下します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3739048/7e0632ad-a963-7aae-e601-51f9c34d4db5.png)

・「証明機関」の「証明書テンプレート」⇒「新規作成」⇒「発行する証明書テンプレート」を押下します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3739048/a3658698-256a-d9b4-d88d-26be3ec508e1.png)

・先ほど作成した証明書テンプレート（今回は「クライアント証明書自動配布」）を選択し、「OK」を押下します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3739048/eb85ca10-d88d-1b33-daf7-a495c110ca9c.png)

・証明書テンプレートの一覧に追加されることを確認します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3739048/f7d14199-30dd-83a5-998b-add3d66b5c4d.png)


### ★クライアント証明書を"配布される側"の設定手順（OU作成）
:::note info
ドメイン参加した端末すべてにクライアント証明書自動配布を適用する場合、「クライアント証明書を"配布される側"の設定手順（OU作成）」を実施する必要はありません。
:::
・AD DSがインストールされたサーバにログイン後、「サーバーマネージャ」⇒「ツール」⇒「Active Directoryユーザとコンピュータ」を押下します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3739048/8ba24aa5-18a8-1d6e-77dd-c349319a6c5a.png)

・ドメインを右クリックし、「新規作成」⇒「組織単位(OU)」を押下します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3739048/7dd197dd-a29e-6f73-6a13-197224a5e462.png)

・OUの名前を入力し、「OK」を押下します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3739048/46d08fb4-22ad-6493-ce96-295459f20e80.png)

:::note info
・OU名に指定はありません。
・「間違って削除されないようにコンテナーを保護する」を選択すると、当該OUを簡単に削除することが不可となります。要件に応じて設定します。なお、セキュリティの観点から、本項目は設定を実施することを推奨します。
:::

・「Computers」⇒クライアント証明書を自動配布したい端末を選択⇒右クリック⇒「移動」を押下します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3739048/51db69ea-4383-8e05-78c2-126b18325356.png)

:::note info
・ドメインに参加した端末はデフォルトの設定であれば「Computers」に自動的に配置されます。別途設定変更を実施している場合は読み替えてご対応ください。
:::

・クライアント証明書自動配布用に作成したOUを選択し、「OK」を押下します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3739048/4a5d3a1d-ff7c-57f0-82a8-15ec3132833c.png)

・クライアント証明書自動配布用に作成したOUを選択し、クライアント証明書の配布対象である端末が存在するか確認する。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3739048/a590f5c5-20b4-2ca6-a7a9-69ef19461688.png)



### ★クライアント証明書を"配布される側"の設定手順（GPO設定）
・「サーバーマネージャ」⇒「ツール」⇒「グループポリシーの管理」を押下します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3739048/54eea9fc-e6a1-5cd4-426f-1e4b78482de9.png)

・「フォレスト」⇒「ドメイン名」を押下し、「クライアント証明書自動配布用に作成したOU」右クリック、「このドメインにGPOを作成し、このコンテナーにリンクする」を押下します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3739048/ce1523c0-7b53-7d3c-6481-a4e54c012db9.png)

:::note info
ドメイン参加した端末すべてにクライアント証明書自動配布を適用する場合、当該作業を実施する必要はありません。
:::

・GPOの名前を入力し、「OK」を押下します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3739048/ec7fecaf-1c37-59eb-82a1-89c5ffe97f6c.png)

:::note info
・GPO名に指定はありません。
・ドメイン参加した端末すべてにクライアント証明書自動配布を適用する場合、当該作業を実施する必要はありません。
:::

・新規作成したGPOをクリックし、「OK」を押下します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3739048/394f3966-07b3-865e-ace2-905586ce01c6.png)

:::note info
・ドメイン参加した端末すべてにクライアント証明書自動配布を適用する場合、新規作成したGPOを「Default Domain Policy」に読み替えてください。
:::

・新規作成したGPOを右クリックし、「編集」を押下します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3739048/3be35fa8-0559-9c22-72d2-f7f670d5dde5.png)

・「コンピュータの構成」⇒「ポリシー」⇒「Windowsの設定」⇒「公開キーのポリシー」にて「証明書サービスクライアント - 自動登録」を右クリックし、「プロパティ」を押下します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3739048/58f782e0-894c-060b-c2ef-cb5826c40291.png)

・構成モデルを「有効」とし、「有効期限が切れた証明書を書き換え、保留中の証明書を更新、および失効した証明書を削除する」と「証明書テンプレートを使用する証明書を更新する」を選択し、「OK」を押下します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3739048/96f36b89-2f08-d887-0d00-8bd7dde73b3b.png)



# 5. クライアント証明書が自動配布されたことを確認する
### ★クライアント証明書が自動配布されたことをクライアントPCにて確認する
・クライアント証明書自動配布前
　「certlm.msc」を起動し、クライアント証明書が存在しないことを確認しました。
 ＜Testcomputer1＞
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3739048/20bc06b0-87ad-83fd-e6cf-e415da375a54.png)
 ＜Testcomputer2＞
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3739048/2719bfab-f2ff-c28e-5bfa-910fda39cd73.png)
＜AD CSがインストールされたサーバ＞
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3739048/0ee466fb-e612-8045-9aac-ad65a575f080.png)
＜AD DSがインストールされたサーバ＞
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3739048/83416f5b-fa94-9080-2d4f-23a33c4a2551.png)


・クライアント証明書自動配布後
端末を再起動したところ、想定通りTestcomputer1とTestcomputer2のみにクライアント証明書が自動配布されることを確認しました。

:::note info
・再起動せずとも、端末のコマンドプロンプトを開き、コマンド「gpupdate /force」を入力することで確認可能です。
・配布されたクライアント証明書はあらかじめ作成した証明書テンプレート（今回は「クライアント証明書自動配布」）から作成されたことが画面キャプチャからわかります。
:::

 ＜Testcomputer1＞
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3739048/c414d40d-7463-5088-da80-1f1fff5188ba.png)
 ＜Testcomputer2＞
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3739048/57c30b9c-361a-a4fd-1083-07c872b8aada.png)
＜AD CSがインストールされたサーバ＞

:::note info
「クライアント証明書自動配布」の証明書テンプレートから作成されたクライアント証明書が存在しません。よって、クライアント証明書が配布されていないことがわかります。
:::
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3739048/f75edf0f-cb96-8ae9-e686-1d0cadea56a0.png)
＜AD DSがインストールされたサーバ＞

:::note info
「クライアント証明書自動配布」の証明書テンプレートから作成されたクライアント証明書が存在しません。よって、クライアント証明書が配布されていないことがわかります。
:::
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3739048/6c318ea8-2e9c-517e-4151-02697b24e2d4.png)




### ★クライアント証明書が自動配布されたことをAD CSがインストールされたサーバにて確認する
クライアントPCだけでなく、AD CSがインストールされたサーバでも配布状況を確認可能です。

・「サーバーマネージャ」⇒「ツール」⇒「証明機関」にて「証明機関」を開き、「発行した証明書」にて確認が可能です。証明書テンプレートがあらかじめ作成した証明書テンプレート（今回は「クライアント証明書自動配布」）が対象です。要求者名が端末名となっているため、クライアント証明書の配布先も把握することが出来ます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3739048/8b7da8eb-ea6f-a503-6b34-02a526cc8c75.png)

:::note info
クライアントPCからクライアント証明書を確認することなく、AD CSがインストールされたサーバから証明書の配布状況を一括で把握、管理可能となります。
:::






# 6. 終わりに
　AD CS（Active Directory 証明書サービス）を利用して任意のクライアントPCにクライアント証明書を自動配布することができました。設定値については、適宜要件に合わせてカスタマイズしていただければと思います。クライアント証明書の発行について、複数のサードパーティー製の製品を採用し、管理をベンダに任せる選択肢も有効かとは思いますが、クライアント証明書を配布する端末がドメインに参加していれば、Microsoft以外のサードパーティー製の製品に頼らずともクライアント証明書の自動で配布等が可能であり、管理も可能であるため、選択肢の1つとして考慮していただけますと幸いです。
 ※ 本ブログに記載した内容は個人の見解であり、所属する会社、組織とは全く関係ありません。

 # 7. 参考文献
https://learn.microsoft.com/ja-jp/

https://jpwinsup.github.io/blog/2023/10/23/ActiveDirectory/Authentication/design-consideration/