Microsoft Entra CBAをオンプレのCAから発行した証明書を使って構成する
Ref: Microsoft Entra 証明書ベースの認証を構成する方法
「証明書ベースの認証(CBA)をオンプレのCA証明書を使って利用して構成する」ためのまとまった情報がなかったのでまとめました。元々英語で作った資料だったので、今回は英語版での記事もあります。なのでスクリーンショットは英語です。日本語のWindowsサーバ上での表記がどうなってるのかわからないので適宜読み替えてください。
Table of Contents
Toggle前提条件
- ドメイン参加していないPCのユーザが多要素認証の一つとして利用可能
- 管理者が証明書リクエストを承認する必要がある(ユーザが勝手に発行できない)
- ユーザUPNに対して証明書を発行
- 証明書はエクスポートできないようにする(ユーザが勝手に他のPCに流用できないようにする)
私が使用した際のユースケースとしては、とある条件付きアクセスポリシー内で、ドメイン参加してる端末は「Hybrid joinedデバイスを使用していること」を条件にできているが
ドメイン参加していないPCを使っているユーザだとそれが使用できなかったところを、「CBAでの認証」を追加要素の認証として証明書がインストールされた端末からのみアクセスを許可している、という感じです。
1. CAの役割をインストール
ドメイン内のサーバにCAロールをインストールしてください。以下の2つが必須です。
- Certification Authority
- Certification Authority Web Enrollment
2. 証明書テンプレートを作成
-
CAサーバ上でcerttmpl.mscを開く
-
Userテンプレートを右クリック→複製
以下は環境に合わせて適切に変更してください。- General
名前と有効期限を決める
- Extensions
- Application Policies
"Smart Card Logon"と"Client Authentication"を選択 - Security
Domain Usersが登録できることを確認 - Compatibility
Windows Server 2012 R2を選択 - Request Handling
"Allow private key to be exported"を選択解除
- Cryptography
"Request must use one of the following providers"にてMicrosoft Smart Card Key Storage Providerを選択
- Subject Name
E-mail nameのみを選択 - Issuance Requirements
- General
-
テンプレートを有効化
certsrv.mscを開いてCertificate Templateを右クリックNew → Certificate Template to Issue → 上で作成したものを選択。
3. テンプレートのスキーマバージョンを変更
スキーマバージョンが3以上だと証明書のWeb要求ができないので、スキーマバージョンを落とす必要があります・・。この操作によってテンプレートの設定がいくつか古いものに置き換わります。
-
ADSI EditをADサーバ上で開く
-
Action -> Connect to -> choose Configuration
-
テンプレート一覧
[CN=Configuration,DC=\<Your domain name>] – [CN=Services] – [CN=Public Key Services] – [CN=Certificate Templates] -
作成したテンプレートをダブルクリック
-
msPKI-Template-Schema-Versionの値を2に変更
4. CA証明書をEntra IDにアップロード
- CAサーバからCA証明書をダウンロード
- Entra IDにて"Certificate authorities"を開く
- "Is root CA certificate"を選択してアップロード
外部に公開しているCRLがあれば指定。
5. 対象ユーザにCBAによる認証を許可
「証明書ベースの認証」に対象のユーザを指定。
保護レベルは多要素認証にしないと認証に失敗します。
6. CBAを強制するための条件付きアクセスポリシーを設定
ここは特に説明しません。
7. 証明書の要求、発行
Windowsクライアント
ここではTPMを秘密鍵の保管場所として使います。
参考: Deploy Virtual Smart Cards
以下のコマンドを管理者として実行
- TPM仮想スマートカードを作成
8桁以上のPINが要求されます。以下のコマンドではPUKと管理キーはデフォルトとしています。
tpmvscmgr.exe create /name VSC /pin PROMPT /puk default /adminkey default /generate
- CSRの作成
certreq -new request.inf certreq.txt
- CAサーバのWEB登録でCSRをアップロードして証明書を要求
対象のユーザでログインしてください。
e.g.) http://your-local-ca.example.com/certsrv/
作成したCSRで、作成したテンプレートを使って証明書を要求します。
- CAサーバ上で証明書を承認
- 証明書をダウンロード、Local Machineにインストール(要管理者権限)
request.inf
[Version]
Signature="$Windows NT$"
[NewRequest]
KeySpec = 1
KeyLength = 2048
HashAlgorithm = SHA256
Exportable = FALSE
MachineKeySet = TRUE
SMIME = False
PrivateKeyArchive = FALSE
UserProtected = FALSE
UseExistingKeySet = FALSE
ProviderName = "Microsoft Base Smart Card Crypto Provider"
ProviderType = 12
RequestType = PKCS10
KeyUsage = 0xa0
証明書内のEmailの項目はADのユーザ情報から取得するため、request.infは全ユーザで共通です。
Macクライアント
コマンドは対象のMac上Terminalを実行。
- 秘密鍵とCSRをrequest.cnfから作成。PINを覚えておく。
openssl req -new -out req.csr -keyout key.key -config request.cnf
- CSRを使って、証明書をWEB登録から要求
- CAサーバにて保留中の証明書から証明書を発行
- Base 64 encodedとしてダウンロード
- 秘密鍵と証明書からp12ファイルを作成。PINを使用。
openssl pkcs12 -export -out cert.p12 -inkey key.key -in certnew_x64.cer
- cert.p12をキーチェーンにインポート
request.cnf
[ req ]
default_bits = 2048
default_md = sha256
distinguished_name = req_distinguished_name
req_extensions = req_ext
prompt = no
[ req_distinguished_name ]
C = US
ST = California
L = Your city
O = Your org
OU = IT
CN = example.com
[ req_ext ]
keyUsage = critical, digitalSignature, keyEncipherment
extendedKeyUsage = clientAuth, 1.3.6.1.4.1.311.20.2.2
[ v3_req ]
keyUsage = critical, digitalSignature, keyEncipherment
extendedKeyUsage = clientAuth, 1.3.6.1.4.1.311.20.2.2
8. 証明書を使用してログイン
おそらくブラウザを完全に再起動しないと証明書がブラウザに読み込まれないです。正しくインストールされていたら証明書を使用したMSアカウントへのログインの際に以下のように証明書が表示されます。
参考までに、使っている環境の条件付きアクセスポリシーでは「指定した発行者」と「UPNがSANのRFC822 Nameと一致していること」の二つを条件として認証しています。
9. おわり
英語から日本語に直してるので、所々日本語がもしかしたら変かもしれません笑
この記事が誰かの役に立てばいいなと思います。