【M365 ハンズオン】クラウドPKIを利用して、Entra CBA(証明書ベースの認証)をやってみる (1/2)

# 1.はじめに

本記事は、***Intune クラウドPKIを利用して、Entra CBA(証明書ベースの認証)を試してみた***という内容です。

以下図のように、Intune クラウドPKIを利用して、SCEP証明書を発行し、IntuneによってSCEP証明書を配布します。そして、テスト用のSaaSに対して、Entra CBA(証明書ベースの認証)を利用してアクセス制御を実施します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/256868/1c9f3275-a7aa-f582-9ac0-6be794fc94d4.png)
<br>

少し長くなるので、クラウドPKIのところと、Entra CBAのところで、2つに分割しており、***今回はクラウドPKI編***です。

# 2.クラウドPKIとは
## 2-1.Intuneの試し方

クラウドPKIは、Intuneの知識がベースとして必要となります。
もし、初めてIntuneを触る場合は、以下URL先に、Microsoft社の太田さんが投稿された「Microsoft Intuneのタメシカタ」という無料Bookがありますので、ご一読いただくと良いです。

https://zenn.dev/takuyaot/books/94c40d93cfb326

## 2-2.クラウドPKIとは

IntuneアドオンプランとなるIntune Suiteに含まれるクラウドマネージドの公開鍵基盤（PKI: Public Key Infrastructure)です。

オンプレミスの基盤を用意することなく、二階層の認証局（CA：Certificate Authorities)を構成することができ、SCEP(Simple Certificate Enrollment Protocol)を利用して、ネットワーク経由で証明書を発行することができます。

### クラウドPKIの利点
以下図は、Microsoft Learnの引用となりますが、クラウドPKIを利用することで、緑の円内に囲まれた部分をクラウド型で利用することができます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/256868/75311eaa-8f33-1882-a5cc-fd0de20fce9d.png)

画像引用：https://learn.microsoft.com/ja-jp/mem/intune/protect/microsoft-cloud-pki-overview#architecture

対して、クラウドPKIを利用しない場合は、以下図のオレンジのサーバ「ルートCA、発行CA、ネットワーク デバイス登録サービス (NDES)、証明書コネクタ」のようなオンプレミス基盤を用意する必要があります。もちろん、可用性（冗長構成にするなど）も考える必要があります。
さらに、NDESに関しては、エンドポイントがインターネット経由でSCEPを利用したい場合は、アタックサーフェス（攻撃表面）となるため、セキュリティにも注意を払う必要があります。
このような大変さをクラウドPKIの利用で、軽減することができます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/256868/a7fb89fb-072c-c9de-3619-cee81923c425.png)

画像引用：https://learn.microsoft.com/ja-jp/troubleshoot/mem/intune/certificates/troubleshoot-scep-certificate-profiles#scep-communication-flow-overview

### PKCSと比べてみると
Intuneのプロファイルのテンプレートには、SCEP証明書のほかに、PKCS証明書があります。
違いとしては、SCEPは、証明書の各要求に固有の証明書がプロビジョニングされ、PKCSは、各デバイスに一意の証明書がプロビジョニングされるという違いがあります。

参考：https://learn.microsoft.com/ja-jp/mem/intune/protect/certificates-configure#introduction-to-certificates-with-intune

また、IntuneによるPKCS証明書の利用においては、***Intuneから***デバイスに証明書を直接配布することができます。
先ほどのSCEP証明書の場合で、クラウドPKIを利用しない場合は、NDESがアタックサーフェスになるということを記載しましたが、IntuneによるPKCS証明書の配布の場合は、Intuneからデバイスに証明書を配布する仕組みとなりますので、そのような心配がないというメリットがあります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/256868/a3b9f001-abf6-4ffa-271a-2aa17106d60c.png)

画像引用：https://learn.microsoft.com/ja-jp/troubleshoot/mem/intune/certificates/troubleshoot-pkcs-certificate-profiles#pkcs-communication-overview

### クラウドPKIを利用可能なデバイス
クラウドPKIを利用可能なデバイスは、***Intuneに登録済み***の***Windows, macOS, iOS/iPadOS, Android***となります。

:::note info
クラウドPKIのSCEP URI
ちなみに、クラウドPKIのSCEP URI(証明書を要求する際に利用するアクセスポイント)は、```https://{{CloudPKIFQDN}}/TrafficGateway/PassThroughRoutingService/CloudPki/CloudPkiService/Scep/*****```　となっています。
IntuneによるSCEP証明書プロファイルをエンドポイントに適用したタイミングで、```{{CloudPKIFQDN}}```のところを正しい文字列に置き換える仕様だったりします。
:::

# 3.手順

ここからはクラウドPKIの作成手順になります。

クラウドPKIに、ルートCAと発行元CAを作ることで、二階層CAを構成し、Entra JoinedとIntune登録を実施したWindows 11 PCにSCEP証明書の配布をいたします。

### 3-1.テスト構成

* ライセンスとして、Intune P1ライセンスに加えて、Microsoft Intune Suite ライセンス（試用版）を利用
* デバイスとして、Windows 11を利用し、Entra JoinedとIntune登録済み
　※本PCは、Hyper-V上に構築しているVirtual Machineとなります

### 3-2.ルートCAの作成

まずは、Intune管理センターにて、「テナント管理 > CA管理」を選択し、「作成」をクリックします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/256868/9a9b5fab-859e-8661-3bae-05a0a4bb14e6.png)
<br>

ルートCAに、好きな名前を設定します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/256868/a428a542-c78f-6061-7fd8-2e601a1e51c8.png)
<br>

CAの種類に、「ルートCA」を選択し、有効期間を10年にします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/256868/e0b4b7ff-5906-0d3d-d98a-cfad25a9cf1c.png)
<br>

:::note
補足
選択可能なCAは、ルートCAと発行元CAの２種類になります。
発行CAは下位CAとなりますが、ここで選択したルートCAの有効期限よりも短い期間の証明書のみを発行することになります。
例えば、以下のはルートCAで有効期限を10年にしていた場合において、発行CAで選択可能な有効期間は、8年, 6年, 4年, 2年となります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/256868/5bedc608-e7a7-17eb-a0aa-a441e950c6a1.png)
:::

拡張キーの使用法は、とりあえず選択可能な種類を全部選択しておきます。
ここで選択した種類の中から、さらに発行元CAでは選択することになります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/256868/91773dd3-587f-10d1-da18-ef7b121b4393.png)
<br>

件名の属性情報を入力します。ここで入力した情報は、エンドポイントに発行記載する情報となります。
クラウドPKIの現在の仕様上、作成した後は編集不可となりますので、注意しましょう。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/256868/f972870d-68ff-ea87-2eff-37d8add86b93.png)
<br>

:::note info
キーのサイズとアルゴリズム
選択可能なものは、以下の通りです。ここで選んだキーのサイズとアルゴリズムは、下位CAに継承されます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/256868/b451f8c9-acb5-761d-82b2-c0f30e0e43e5.png)
:::

スコープタグはそのままの情報を利用し、確認しましたら、「作成」をクリックします。
これで、ルートCAは作成完了です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/256868/4babe79a-1abe-15b2-321c-f193670b70af.png)
<br>


:::note warn
***証明機関の削除***

2024年7月22日の週のアップデートで、CAの削除が実装されました。
詳細に関しては、下記参考URLをご確認下さい。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/256868/32a48b9b-2b21-07bc-012e-19a9be98c4ec.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/256868/cc502a7a-ebda-06e7-46c4-0341273c7681.png)

参考URL
https://learn.microsoft.com/ja-jp/mem/intune/protect/microsoft-cloud-pki-delete
:::

### 3-3.発行元CAの作成

再度、 「CA管理」にて、「作成」をクリックします。
発行元CAの名前を入力します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/256868/9d3bd319-9c25-b5f6-84e3-a0edf44c0800.png)
<br>

CAの種類には、「発行元CA」を入力し、ルートCAソースには、「Intune」を選びます。
するとルートCAを選択可能になるので、先ほど作成したルートCAを選びます。
有効期間は、6年を選択しました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/256868/2d71f0e6-6b71-26b7-2b7d-010c27a235b2.png)
<br>

:::note
持ち込みルートCA
ルートCAソースには、「独自のルートCAを持ち込む」という選択肢もあります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/256868/24bd912f-05d0-b55b-db23-69c9e3f1f064.png)
<br>
:::

拡張キーの使用法は、とりあえず選択可能なものをすべて選択しておきます。
なお、IntuneによるSCEP証明書の配布時には、この中のClient authを利用する予定です。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/256868/2f26924c-36ed-7dcf-1c10-1bb67079a5fd.png)
<br>

そして、件名の属性情報を入力します。
共通名は、発行元CAだとわかるような情報を入力します。
暗号化のところは、選択不可で、ルートCAの情報がそのまま選択されています。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/256868/62a3bda7-74ce-5ef7-6b6a-145d47dd7a6c.png)
<br>

それでは、入力した情報を確認し、「作成」をクリックします。
なお、一度作成すると修正ができませんので、注意をする必要があります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/256868/c3ae3a7c-4bca-a62b-10f1-fc33571b6db2.png)
<br>

### 3-4.証明機関からルート証明書のダウンロードとSCEP URIの確認
出来上がった、証明機関のリストです。
各証明機関名を選択すると、詳細画面や各証明機関の証明書をダウンロードすることができます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/256868/bf653d6f-ae06-469c-91b8-e202c37ec01c.png)

<br>

ルート証明機関をクリックした画面です。
こちらの「証明書のダウンロード」をクリックし、ルート証明書をダウンロードしておきます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/256868/901830eb-2ef4-b13c-ab80-15ced85a5740.png)

<br>

また、発行元CAの方は、Monitorという項目があり、こちらで発行した証明書や失効させた証明書の確認ができます。
実際に発行した証明書が表示されるまで、ディレイがありました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/256868/ff5e1a10-bc8c-2b35-429b-348183464b31.png)
<br>

Monitorではなく、「Properties」を選択します。
ここでは発行元CAの情報を確認することができます。下の方にある「SCEP URI」をメモしておきます。
この情報は、IntuneでSCEP証明書のプロファイルの設定をする際に利用します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/256868/2bec9c4b-d792-f32a-19ee-b9a8ef3fe48a.png)
<br>



### 3-5.ルート証明書の配布

それでは、ルート証明書をエンドポイントに配布します。
Intune管理センターから、「デバイス > Windows > 構成」に移動します。
「作成 > + 新しいポリシー」から、「Windows 10 以降 > テンプレート」を選択します。
テンプレートから、「信頼済み証明書」を選択します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/256868/0664ea7e-9352-b528-3b29-a60ac75080cb.png)
<br>

プロファイルの名前を入力します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/256868/e9d96a4a-45ce-b632-c5dc-99739097b3f4.png)
<br>

先ほどダウンロードしておいたルート証明書をアップロードします。
保存先ストアは、「コンピューター証明書ストア　ルート」を選びます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/256868/0e86dc90-4ad8-a85b-af7f-69e698e22bd3.png)
<br>

配布対象のセキュリティグループを選びます。
ここでは、テスト用のユーザを入れたグループを作っています。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/256868/e9a5661c-565a-ca95-5d19-75fe5eef3e19.png)
<br>

:::note warn
割り当てグループ
「信頼済み証明書」プロファイルで割り当てたセキュリティグループと、「SCEP証明書」プロファイルで割り当てるセキュリティグループは、同じにすることが推奨です。
Microsoft Learnによると、片方がユーザグループ、もう片方がデバイスグループだと、SCEP証明書配布に失敗する可能性があります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/256868/58d9f1e9-25c7-c8e2-9a37-fabda6286c35.png)

引用：
https://learn.microsoft.com/ja-jp/troubleshoot/mem/intune/certificates/troubleshoot-scep-certificate-profile-deployment
:::

「作成」をクリックして、完了です。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/256868/64e98a7a-5925-2757-94fa-5390861cd51b.png)
<br>

### 3-6.SCEP証明書の配布

Intune管理センターから、「デバイス > Windows > 構成」に移動します。
「作成 > + 新しいポリシー」から、「Windows 10 以降 > テンプレート」を選択します。
テンプレートから、「SCEP証明書」を選択します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/256868/e79b3e81-573e-4f18-e1f7-c130f88eb47b.png)
<br>

プロファイルの名前を入力します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/256868/6edf0158-4bc1-ff7e-e323-45dbe5cd1e0f.png)
<br>

ここでは、証明書の種類に「ユーザー」を選択します。
ユーザーを選んだ場合は、Windows PCのユーザ証明書（certmgr.msc）の個人のところに証明書がインストールされます。
以下画像のように、入力しています。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/256868/19d78333-82f8-7e41-9e04-193ecd838923.png)
<br>

:::note info
選択可能なオプション

①証明書の種類
* ユーザー証明書：証明書のサブジェクトと SAN 内にユーザー属性とデバイス属性の両方を含める
* デバイス 証明書：証明書のサブジェクトと SAN のデバイス属性のみを含める

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/256868/e9d76725-a30d-9981-58bf-434f275f6ffb.png)

②キー記憶域プロバイダー (KSP)
証明書のキーを格納する場所を指定
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/256868/0d724b82-8920-a22d-6ad4-0f0e6e3f74b2.png)

③証明書のキー使用法
* デジタル署名: キーがデジタル署名で保護されている場合だけ、キーを交換
* キーの暗号化: キーが暗号化されている場合だけキーを交換

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/256868/31a0d7b8-2a78-0ac9-7adf-586c7883e462.png)

④ハッシュアルゴリズム
* SHA-1：任意の長さの元データを元に160ビットの値を生成するハッシュ関数
         2005年にSHA-1に対する攻撃法が発見されSHA-2への移行が推奨
* SHA-2：SHA-224 , SHA-256 , SHA-384 , SHA-512 と種類があり、一般的には、 SHA-256 がよく使用される

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/256868/1a0d92df-8916-e6de-908a-aae59a266620.png)

参考
https://learn.microsoft.com/ja-jp/mem/intune/protect/certificates-profile-scep
:::

拡張キー使用法ですが、Entra CBA用ですので、クライアント認証を選んでいます。
なお、ここで定義済みの値を選択すると、オブジェクト識別子と名前は自動で入力されます。

そして、SCEPサーバのURLには、先ほど発行元CAでメモをしておいたSCEP URLの情報を入力します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/256868/37b4511e-d0fa-2484-6362-162fa188a3ed.png)

:::note info
拡張キーの使用法
選択肢は以下があります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/256868/56860232-b348-b216-247e-1337366d8ec4.png)
::::

:::note info
CloudPKIFQDN
SCEPサーバのURL中に、{{CloudPKIFQDN}}という部分がありますが、このままで問題ありません。
Intuneがエンドポイントに、SCEPプロファイルを配信する際に、正しい値に変換してくれます。
:::

信頼済み証明書のプロファイル作成時に、選んだグループと同じグループを割り当てて、完了です。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/256868/d1061b32-bc9b-b8c5-953f-6f11e86c8e12.png)

### 3-7.SCEP証明書の確認

Windows PCを確認してみます。
検索バーで、「certmgr.msc」を選択し、「個人 > 証明書」を選択します。
正常に、SCEP証明書が配布されている場合は、発行者名が発行元CAの証明書があります。
証明のパスを確認すると、ルートCA（Cloud-PKI-Root-CA）から発行元CA（Cloud-PKI-ICA）、SCEP証明書と信頼チェーンが確立されています。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/256868/20d58489-780f-8300-c976-579ef75000bf.png)
<br>

また、サブジェクトのところには、IntuneのSCEP証明書プロファイルでユーザ名を指定したため、ユーザ名が入っていることが確認できます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/256868/aa3d334a-66b5-2d77-bc0e-9ed146c1fdbd.png)
<br>

サブジェクト代替名のところには、IntuneのSCEP証明書プロファイルでUPNを指定したため、UPNが入っていることが確認できます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/256868/0fdf1641-e79e-edb2-100c-ad84ed052ac4.png)
<br>

# 4.おわりに

これで「クラウドPKIを利用して、Entra CBA(証明書ベースの認証)をやってみる」のクラウドPKI編は終了となります。
ADCSを二階層CAで作って、SCEP証明書の発行をしてみるよりも、構築も保守も、だいぶ楽そうですね。
次回は、以下URLとなります。このクラウドPKIを利用して、Entra CBAをやってみようと思います。

https://qiita.com/mokonacl/items/a2df4fa48b3f0f1f5b05