# Domain Controller 証明書

{% hint style="info" %}
この機能にはバージョン **1.6** 以上が必要です。
{% endhint %}

{% hint style="warning" %}
SCEPman Enterprise Edition のみ
{% endhint %}

SCEPman を使用して、ドメイン コントローラーに Kerberos 認証証明書を発行できます。これにより、AAD またはハイブリッド参加済みデバイスが、オンプレミス リソースにアクセスする際にシームレスに認証できるようになります。これは、 **Windows Hello for Business の Hybrid Key trust**を実装するために使用できます。SCEPman は、 **Public key infrastructure**の要件を置き換えます。詳細は [こちら](https://docs.microsoft.com/en-us/windows/security/identity-protection/hello-for-business/hello-hybrid-key-trust-prereqs)

## 拡張キー使用法 (EKU) 拡張がない Root CA

**この機能では、Root CA に対して新しい要件があります。**\
以前のバージョンから **1.6** 更新している場合は、 **新しい** Root CA を生成する必要があります。\
Kerberos 認証証明書をサポートするには、CA 証明書に Enchanced Key Usage (EKU) 拡張が含まれていないか、Kerberos Authentication と Smart Card Logon のいずれかが含まれている必要があります。

SCEPman から開始し、 **1.6** SCEPman を使って Root CA を生成する場合は、次の手順をスキップできます。\
それ以外の場合は、このガイドに従って新しい Root CA を生成してください。

{% hint style="warning" %}
新しい CA 証明書を生成した場合は、Intune ポリシーを更新し、新しい Root CA と新しいユーザー証明書およびデバイス証明書を展開する必要があります。
{% endhint %}

1. 次の場所に移動します **Key Vault**
2. ユーザー アカウントが **Access policies** に、すべての証明書アクセス許可とともに追加されているか確認します
3. 次へ移動します **Certificates**を選択し、CA 証明書をクリックしてから **Delete**
4. CA 証明書の削除に成功したら、必ず **Manage deleted certificates**
5. をクリックし、手順 3 で削除した CA 証明書を選択してから **Purge** をクリックします（証明書を完全削除すると、復元できなくなることに注意してください）。
6. これで SCEPman App Services を再起動します
7. App Services の再起動後、SCEPman URL に移動して SCEPman ダッシュボードを開きます
8. セクション **Config issues**が表示されるので、このセクションの手順に従ってください。
9. 新しい CA 証明書を生成したら、SCEPman ダッシュボードで CA の適合性を確認できます。

SCEPman ダッシュボードでの CA の適合性:

![](https://114237723-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-LoGejQeUQcw7lqnQ3WX%2Fuploads%2Fgit-blob-4998f1e56f64d240e4e8d23a9aa886cc8b49724b%2F2022-05-27%2011_09_46-Window.png?alt=media)

## SCEPman サービスへの構成変更

この機能を有効にするには、SCEPman サービスに 2 つのアプリケーション設定を追加する必要があります。現在の実装では、DC 要求に事前共有キー（パスワード）を使用します。\
**新しいキー/パスワードを生成し、安全な場所に保管してください。** （この後の手順と、後でドメイン コントローラー上で必要になります）

1. に移動する **App Services**
2. 次に、SCEPman アプリを選択します
3. 次に **Settings** で **Environment variables**
4. をクリックし、Add を選択します
5. Type **AppConfig:DCValidation:Enabled** を Name として入力します（Linux ベースの SCEPman では : の代わりに \_\_ を使用してください）
6. Type **true** を Value として入力します
7. で確定します **OK**
8. を選択します **追加** 再度
9. Type **AppConfig:DCValidation:RequestPassword** を Name として入力します（Linux ベースの SCEPman では : の代わりに \_\_ を使用してください）
10. Value に、 **キー/パスワード**として、以前生成したものを入力します
11. で確定します **OK**
12. アプリケーション設定を保存します

## Kerberos Authentication のためにドメインで CA 証明書を信頼する

Kerberos 認証に使用される証明書は、認証 CA 証明書として AD ドメイン内で信頼されている必要があります。SCEPman ダッシュボードから CA 証明書をダウンロードしてください。ファイルを `scepman-root.cer`として保存した場合、Enterprise Administrator 権限を持つアカウントで次のコマンドを使用して SCEPman CA 証明書（Root CA でも Intermediate CA でも可）を公開できます。

```
certutil -f -dsPublish scepman-root.cer NTAuthCA
```

同様に、次のコマンドを実行して、Root CA 証明書（つまり SCEPman CA 証明書、または SCEPman が Intermediate CA の場合は SCEPman CA 証明書チェーンの Root CA）を、AD フォレスト内のすべてのマシンの Trusted Root 証明書ストアに配布します。

```
certutil -f -dsPublish scepman-root.cer RootCA
```

その後、CA 証明書は一般に AD で信頼され、特に Kerberos Authentication 用として信頼されます。ただし、すべてのデバイスにこの構成が行き渡るまでには多少時間がかかります（既定の構成では最大 8 時間）。任意のマシンで `gpupdate /force`を実行すると、このプロセスを高速化できます。たとえばドメイン コントローラー上で実行します。

これにより、DC 証明書がドメイン内で信頼されるようになります。また、Root CA 証明書を配布する Trusted Certificate プロファイルの対象にある、すべての Intune 管理デバイスでも信頼されます。DC 証明書をすべてのシステムで信頼させるには、アプライアンスやクラウド サービスなど、他のサービスに Root CA を手動で配布する必要がある場合があります。

## クライアントへのインストール

次に、当社のオープン ソース SCEP クライアント ソフトウェア [SCEPClient](https://github.com/scepman/scepclient/releases)をダウンロードする必要があります。接尾辞 *-framework* が付いたリリースは .NET Framework 4.6.2 を使用し、これは Windows Server 2016 にプレインストールされており、より新しいバージョンと互換性があります。その他のリリースでは、対象システムに .NET Core Runtime をインストールする必要があります。

ドメイン コントローラー上の管理者権限付きコマンド プロンプトで次のコマンドを実行し、SCEPman から Domain Controller 証明書を受け取ります。

```
ScepClient.exe newdccert https://your-scepman-domain/dc RequestPassword
```

前のコマンドに SCEPman の URL を追加する必要がありますが、パスはそのままにしてください `/dc`を保持し、 `RequestPassword` を、以前生成した安全なキー/パスワードに置き換えます。

要求パスワードは SCEPman の CA 証明書で暗号化されるため、SCEPman のみが読み取れます。Domain Controller 証明書は、正しい要求パスワードがある場合にのみ発行されます。

### 証明書の自動更新

{% hint style="warning" %}
上記のコマンドは、すでに有効な証明書があるかどうかに関係なく、新しい DC 証明書を要求します。既存の証明書の有効期限が近い場合にのみ証明書を更新する方法については、次のセクションを参照してください。
{% endhint %}

証明書を完全に自動更新するには、ScepClient を **すべての** ドメイン コントローラーに PowerShell スクリプト [enroll-dc-certificate.ps1](https://github.com/scepman/scepclient/blob/Core31/enroll-dc-certificate.ps1)とともに配布する必要があります。次のコマンドを SYSTEM コンテキストで実行するスケジュール タスクを追加します（URL と要求パスワードを調整してください）。

```
powershell -ExecutionPolicy RemoteSigned -File c:\scepman\enroll-dc-certificate.ps1 -SCEPURL https://your-scepman-domain/dc -SCEPChallenge RequestPassword -LogToFile
```

PowerShell スクリプトが SCEPClient.exe およびその追加依存関係と同じディレクトリにあることを確認してください。

![スケジュール タスクでの実行アクションの構成](https://114237723-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-LoGejQeUQcw7lqnQ3WX%2Fuploads%2Fgit-blob-732f9e212c1622579da03c12e497e2b1b632aaab%2Fimage%20\(17\).png?alt=media)

これは、マシン ストア内の既存の DC 証明書を確認します。少なくとも 30 日の有効期限がある適切な証明書がない場合にのみ、ScepClient.exe を使用して SCEPman から新しい DC 証明書を要求します。30 日のしきい値を変更したい場合は、PowerShell スクリプトの -ValidityThresholdDays パラメーターを使用してください。

スクリプトは、保存されているディレクトリに連続ログ ファイルを書き込みます。このログ ファイルが不要な場合は、 `-LogToFile` パラメーターを省略してください。代わりに、Information、Error、または Debug ストリームをファイルにリダイレクトできます（例: `6>logfile.txt 2>&1`).

WHfB では、バージョン 2016 以降で実行されているすべての DC に Kerberos Authentication 証明書が必要です。古い DC は認証要求を新しい DC に転送するため、必ずしも Kerberos Authentication 証明書を必要としません。ただし、それらにも証明書を用意するのがベスト プラクティスです。

### 既存の内部 PKI の廃止

内部 PKI が SCEPman と並行して DC 証明書（証明書テンプレート「Domain Controller」「Domain Controller Authentication」「Kerberos Authentication」）を登録しないようにしてください。そうしないと、DC が内部 PKI の DC 証明書を使用する可能性があり、たとえば CDP に到達できない場合には信頼されないものと見なされます。SCEPman の DC 証明書は、上記テンプレートの証明書で使用できるすべての用途、たとえば Kerberos 認証や LDAPS に使用できます。

これを実現する最も簡単な方法は、内部 CA がテンプレート「Domain Controller」「Domain Controller Authentication」「Kerberos Authentication」の証明書を発行しないようにすることです。Certification Authority MMC Snap-In で、各内部 CA の発行済みテンプレートの一覧からこれらのテンプレートを削除します。その後、内部 CA からすでに発行された証明書を、ドメイン コントローラーの「MY」ストアから削除します（`certlm.msc` を開き、Personal に移動します）。 `gpupdate /force`の後でも、内部 PKI からの新しい DC 証明書が DC の Personal ストアに表示されるべきではありません。
