NPS 用 サーバー証明書の作成 (AD CS：スタンドアロン CA)

# はじめに
ネットワークポリシーサーバー (NPS) で使用するための サーバー証明書 を発行するための手順です。
証明書を発行する証明機関は、AD CS を使った方法で説明しています。

AD CS には、エンタープライズ CA と スタンドアロン CA があります。
どちらの方式でも、NPS 用 の サーバー証明書 を作成できるのですが、証明書 と NPS との関係性をしっかりと理解することを目的としていますので、スタンドアロン CA を使った手順としています。

# 1. 事前準備
NPS 用 のサーバー証明書 を作成する前に必要な 前提となる環境です。

## 1-1. NPS の導入
構築済みの NPS サーバー を用意してください。
まだ構築していない場合は、以下の手順を参考に構築しましょう。

https://qiita.com/carol0226/items/1f4bb866c66e0ea440b2

## 1-2. AD CS の導入
構築済みの AD CS サーバー を用意してください。
この手順では、AD CS が、以下の構成となっていることを想定しています。
- スタンドアロン CA
- 証明機関 を導入済み
- 証明機関 Web 登録 を導入済み

まだ構築していない場合は、以下の手順を参考に準備しましょう。
※スタンドアロン CA を選択してください。

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

# 2. サーバー証明書の作成
以下の URL は、公開情報に記載されている、NPS サーバー用の証明書の要件です。
この要件に合った サーバー証明書 を作成する必要があります。
この公開情報を読んだだけで、適切な サーバー証明書 を作るのは難しいと思いますので、その手順については、本章 で説明していきます。

https://learn.microsoft.com/ja-jp/windows-server/networking/technologies/nps/nps-manage-cert-requirements#minimum-server-certificate-requirements

## 2-1. 証明書要求 (CSR) の作成～申請
NPS サーバーへ 管理者権限で サインイン して作業を行ってください。

サーバー証明書 を作成するための 証明書要求ファイル(CSR) を作成します。
この CSR ファイルを 証明機関 (AD CS) へ提出し 承認を受けることで、サーバー証明書を受け取ることができます。

### 2-1-1. INFファイルの準備
INF ファイルは、CSR を作成するための INPUT ファイルとなります。
作成した INF ファイルを コマンドで変換して、CSR ファイルを作成します。
INF ファイルは、テキストエディタで必要事項を記載して作成します。

1. NPS の 役割を導入した サーバー にサインインします。
　<br>
1. テキストエディタ を開き、以下の INF ファイルサンプルの内容をコピーして 貼り付けます。
````
[NewRequest]
Subject = "C=JP,ST=Tokyo,L=Chuo-ku,O=Sample,CN=npsradius.nps.local"
Exportable = TRUE
KeyLength = 2048
KeySpec = 1
KeyUsage = 0xA0
MachineKeySet = True
ProviderName = "Microsoft RSA SChannel Cryptographic Provider"
HashAlgorithm = sha256
ProviderType = 12
RequestType = CMC

[EnhancedKeyUsageExtension]
OID=1.3.6.1.5.5.7.3.1

[Extensions]
2.5.29.17="{text}"
_continue_ = "dns=npsradius.nps.local"
````
3．"Subject" は、サーバー証明書 の所有者の属性を示しています。
以下を参考に、都道府県、市区町村、組織 などを任意の文字列(英字) に編集してください。
この値は、証明書を取得したクライアント側で 証明書の発行元が 誰であるのかを 人が識別するためのもので、CN=[FQDN]以外の値は、システムの動作に影響するものではありません。動作検証するだけなら、サンプルの内容のままでも問題は無いです。
~~~~
Subject = "C=JP,ST=[都道府県],L=[市区町村],O=[組織],OU=[組織単位],CN=[FQDN]"
~~~~

4．"npsradius.nps.local" となっている箇所は、NPSサーバー のホスト名＋ドメイン名 となります。利用する環境に合わせて、修正してください。
"Subject の CN=" と "_continue_ の dns=" の２か所あります。

:::note info
上記の値は、NPS で認証を行う クライアントPC が DNSで名前解決する事ができる名称になっている必要があります。
具体的に言うと、"nslookup npsradius.nps.local" のコマンドを実行したら、NPS サーバー の IPアドレス が返ってくる状態です。
:::

5．編集が終わったら、テキストを保存します。名称は任意ですが、本手順では "request.inf" という名前で保存したこととして説明を続けます。

## 2-1-2. CSRファイルの作成
1. コマンドプロンプトを表示して、上記のファイルを保存したフォルダに移動します。
以下のコマンドを実行します。
・request.inf が、事前に作成した INF ファイル名
・request.req が、変換後に作成される CSR ファイル名
~~~~
certreq -new -f request.inf request.req
~~~~
上記のコマンド実行を実行した時の画面イメージ
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1619637/e42580ba-9c66-6f37-89cd-4d1e7182e621.png)

2．以下のように request.req というファイルが出来ている事を確認します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1619637/45b73cfe-669c-851b-ef27-dafa79dacfdc.png)

これで、CSR ファイルが作成できました。
このファイルを使って、証明機関に対して 証明書の発行要求を出す事ができます。

## 2-1-3. 証明書要求の実施
1. ブラウザを起動して、http:// [AD CSサーバーのIP] /certsrv へアクセスして、「証明書を要求する」を押します。
ページが開かない場合は AD CS サーバー の Windows Firewall の設定を見直してください。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1619637/c07a05bc-6b27-cef8-70e3-8074b2da0dd7.png)
　<br>
1. 「証明書の要求の詳細設定」を選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1619637/1f281772-7bb3-6fea-3534-0039ea398d92.png)
　<br>
1. 以下の赤枠のリンク先を選択します（この画面は 出ないこともあります）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1619637/cf218b2e-a0ee-10f2-7e19-94f614c2f25f.png)
　<br>
1. 前章で作成した request.req をメモ帳で開き、「すべてを選択」して「コピー」します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1619637/0fa705ac-91d9-e475-2e47-1d829cf12788.png)
　<br>
1. 先ほど開いた 証明書 Web 登録の画面の以下の場所に、貼り付けて「送信」を押します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1619637/ded2a68a-fc2b-472c-4122-295247f9ca53.png)
　<br>
1. 証明書の要求が受け付けられると、以下の画面になります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1619637/5065eb5f-ef6e-9f72-9b51-bdd63fb427c5.png)

以上で、サーバー証明書の要求 (CSR) が、証明機関 (AD CS) へ申請されました。

## 2-2. 証明機関で 証明書を承認し、証明書を発行する
こちらは、企業内の 証明機関の管理者の立場になったつもりで作業を行います。
証明機関（AD CS サーバー）へ 管理者権限 でサインインして作業を行ってください。
承認の作業については、以下の記事で 手順を説明していますので、この通りに実施ください。

https://qiita.com/carol0226/items/0c9a6c880fcacbcb8998

## 2-3. 発行された証明書の受け取り
NPSサーバーへ 管理者権限で サインインして作業を行ってください。

1. ブラウザを起動して、http:// [AD CSサーバーのIP] /certsrv へアクセスして、「保留中の証明書の要求の状態」を押します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1619637/9b35d7ac-0055-e082-f71b-9d74b418e4eb.png)
　<br>
1. 以下のリンクが、要求に対して 承認された サーバー証明書 です。
このリンクを、クリックしてください。
ここにリンクが表示されていない場合は、以下の点を確認してください。
・証明書を要求した時と、同じマシン、同じブラウザ を使っているか？
・AD CS サーバー側で、ちゃんと 承認が実施できているか？（否認や削除をしてないか？）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1619637/429f216c-24ba-a3ad-2de1-cad45d750fb9.png)
　<br>
1. 以下の赤枠の選択肢を選び、サーバー証明書 をダウンロードします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1619637/04cb291d-d572-0ca8-b269-cedeb55f971d.png)
　<br>
1. ダウンロードしたファイルは、CertReqコマンドを実行したフォルダへコピーしておきます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1619637/bc3cfc67-e5f0-6ea1-3752-74cc4fd7383b.png)
　<br>
1. コマンド画面を 管理者モード で開き、証明書をダウンロードしたフォルダへ "cd" コマンドで移動します。続いて、以下のコマンドを実行して、証明書の受け取り (Accept) を実施します。
~~~~
CertReq -Accept certnew.p7b
~~~~
下図の通り、証明書がインストールされた旨のメッセージが表示されれば OK です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1619637/feaef87e-038a-c1fd-8d42-23b7b1370c2f.png)

:::note alert
CertReq -Accept コマンドは、事前に CertReq -new コマンドで証明書を要求した処理の後続処理となっていて、"-new" と "-Accept" は対になっています。
そのため、証明書要求を実施していないマシンに サーバー証明書（p7b) を複製して、CertReq -Accept を実施しても、エラーが発生して取り込めません。
さらに、１回の証明書要求(-new) に対して、１回の -Accept しか実施できません。
２回目の -Accept は、プロセッサエラーが発生して取り込めないため、その場合は CertReq -new の実施からやり直してください。
:::

:::note warn
こんなエラーが出たこともありました。
この時は、NPS サーバーに 証明機関のルート証明書が入っていない場合でした。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1619637/b60983a5-f22c-c06b-0f84-d877dc07a30e.png)
以下の記事を参考に、AD CS サーバーから ルート証明書をダウンロードして、NPSサーバーにインポートしてください。
★この記事の通りに作業をすすめますが、相違点があります。
本作業の場合は、証明書 の インポート先は「ローカルコンピューター」にしてください。
https://qiita.com/carol0226/items/33042c5c639c79832aeb
:::

6．実際に取り込まれた サーバー証明書 を確認するために、証明書ストアを開きます。
certlm.msc コマンドを実行します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1619637/d1887d1a-21d1-7974-cec2-fd506a880bc0.png)

[信頼されたルート証明機関] の配下には、AD CS の名前がついたルート証明書が存在していれば OK です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1619637/82f6ea2d-28d5-2955-51d4-93c6bcf0638d.png)

[個人] の配下には、発行した サーバー証明書 が 存在していれば OK です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1619637/6d2a814f-73cc-4b81-be02-98ea64d3481d.png)