はじめに
Windows の クライアント PC で 802.1x 認証 (EAP-TLS) を使用するための クライアント証明書 を発行するための手順です。
証明書を発行する証明機関は、AD CS を使った方法で説明しています。
AD CS には、エンタープライズ CA と スタンドアロン CA があります。
どちらの方式でも、クライアント証明書 を作成できるのですが、本記事では 証明書 と クライアント PC との関係性をしっかりと理解することを目的としていますので、スタンドアロン CA を使った手順としています。
なお 運用を意識した場合は、エンタープライズ CA を利用することをお勧めします。
スタンドアロン CA では、すべて手動で行う必要がありますが、これらの操作を ほぼ 全自動で証明書の配布まで実施されます。
1. 事前準備
クライアント証明書 を作成する前に必要な 前提となる環境です。
AD CS の導入
構築済みの AD CS サーバー を用意してください。
この手順では、AD CS が、以下の構成となっていることを想定しています。
- スタンドアロン CA
- 証明機関 を導入済み
- 証明機関 Web 登録 を導入済み
まだ構築していない場合は、以下の手順を参考に準備しましょう。
※スタンドアロン CA を選択してください。
2. クライアント証明書 の作成
以下の URL は、公開情報に記載されている、クライアント証明書 の要件です。
この要件に合った クライアント証明書 を作成する必要があります。
この公開情報を読んだだけで、適切な クライアント証明書 を作るのは難しいと思いますので、その手順については、本章 で説明していきます。
注意 2025/2/25 追記
2025/2/11 以降の 最新 KB が適用されたドメインコントローラーを使う場合は、注意が必要です。
本記事の内容を検証して投稿した時点では、考慮していませんでしたが、高度な証明書マッピング の対策が必要になります。
どのような問題なのかは、以下の私の記事を参照してください。
厳密な証明書マッピング 2025/2/11 完全適用モードの注意点 (KB5014754)
https://qiita.com/carol0226/items/4ab239cfffb3f6a0891a
そして、具体的に、どのような対策を行えばよいかは、以下に分かりやすく説明されています。
2通りのうち、いずれかの対策を行ってください。
対処方法について ( 証明書のマッピング )
https://jpwinsup.github.io/blog/2023/04/11/PublicKeyInfrastructure/CertificateManagement/certificate-based-authentication-changes-on-may-2022/#対処方法について-証明書のマッピング
参考
上記の 高度な証明書マッピングの内容が難しいと感じる場合で、かつ 本公開しないつもりの PoC 検証が目的であれば、以下のレジストリキーの対策で乗り切っても良いかと思います。
レジストリキー
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Kdc
値
StrongCertificateBindingEnforcement = "1"
注意
ただし、この構成のまま 本番公開はしないでください。2025年9月のKBが適用されると認証ができなくなります。
2-1. 証明書要求 (CSR) の作成~申請
クライアント PC へ 管理者権限で サインイン して作業を行ってください。
クライアント証明書 を作成するための 証明書要求ファイル(CSR) を作成します。
この CSR ファイルを 証明機関 (AD CS) へ提出し 承認を受けることで、クライアント証明書を受け取ることができます。
クライアント証明書 を作成する際には、コンピューター認証 または ユーザー認証 のどちらを行う想定であるかを考慮しておく必要があります。
2-1-1. INFファイルの準備
INF ファイルは、CSR を作成するための INPUT ファイルとなります。
作成した INF ファイルを コマンドで変換して、CSR ファイルを作成します。
INF ファイルは、テキストエディタで必要事項を記載して作成します。
- クライアント PC に 管理者権限で サインイン します。
- テキストエディタ を開き、以下の INF ファイルサンプルの内容をコピーして 貼り付けます。
2-1-1-1. "コンピューター認証" 用 INFファイル例
[NewRequest]
Subject = "C=JP,ST=Tokyo,L=Chuo-ku,O=Intellilink,CN=pc01.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.2
[Extensions]
2.5.29.17="{text}"
_continue_ = "dns=pc01.nps.local"
2-1-1-2. "ユーザー認証" 用 INFファイル
[NewRequest]
Subject = "C=JP,ST=Tokyo,L=Chuo-ku,O=Intellilink,CN=user01"
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.2
[Extensions]
2.5.29.17="{text}"
_continue_ = "upn=user01"
INFファイル補足
1."Subject" は、クライアント証明書 の所有者の属性を示しています。
以下を参考に、都道府県、市区町村、組織 などを任意の文字列(英字) に編集してください。
この値は、証明書を取得したクライアント側で 証明書の発行元が 誰であるのかを 人が識別するためのもので、CN=[FQDN]以外の値は、システムの動作に影響するものではありません。動作検証するだけなら、サンプルの内容のままでも問題は無いです。
Subject = "C=JP,ST=[都道府県],L=[市区町村],O=[組織],OU=[組織単位],CN=[FQDN]"
2."pc01.nps.local" となっている箇所は、クライアント PC の ホスト名+ドメイン名 となります。利用する環境に合わせて、修正してください。
"Subject の CN=" と "continue の dns=" の2か所あります。
3."user01" となっている箇所は、ユーザー の UPN名 となります。利用する環境に合わせて、修正してください。
"Subject の CN=" と "continue の upn=" の2か所あります。
4.編集が終わったら、テキストを保存します。名称は任意ですが、本手順では "request.inf" という名前で保存したこととして説明を続けます。
クライアント証明書 の場合は、数多くの証明書を発行するので、PC名やユーザー名ごとに infファイルのファイル名を設定して、保存しておくのも良いと思います。
2-1-2. CSRファイルの作成
- コマンドプロンプトを表示して、上記のファイルを保存したフォルダに移動します。
以下のコマンドを実行します。
・request.inf が、事前に作成した INF ファイル名
・request.req が、変換後に作成される CSR ファイル名
certreq -new -f request.inf request.req
2.以下のように request.req というファイルが出来ている事を確認します。
これで、CSR ファイルが作成できました。
このファイルを使って、証明機関に対して 証明書の発行要求を出す事ができます。
2-1-3. 証明書要求の実施
- ブラウザを起動して、http:// [AD CSサーバーのIP] /certsrv へアクセスして、「証明書を要求する」を押します。
ページが開かない場合は AD CS サーバー の Windows Firewall の設定を見直してください。
- 「証明書の要求の詳細設定」を選択します。
- 以下の赤枠のリンク先を選択します(この画面は 出ないこともあります)
- 前章で作成した request.req をメモ帳で開き、「すべてを選択」して「コピー」します。
- 先ほど開いた 証明書 Web 登録の画面の以下の場所に、貼り付けて「送信」を押します。
- 証明書の要求が受け付けられると、以下の画面になります。
以上で、クライアント証明書の要求 (CSR) が、証明機関 (AD CS) へ申請されました。
2-2. 証明機関で 証明書を承認し、証明書を発行する
こちらは、企業内の 証明機関の管理者の立場になったつもりで作業を行います。
証明機関(AD CS サーバー)へ 管理者権限 でサインインして作業を行ってください。
承認の作業については、以下の記事で 手順を説明していますので、この通りに実施ください。
2-3. 発行された証明書の受け取り
CSR を作成した クライアント PC へ 管理者権限で サインインして作業を行ってください。
- ブラウザを起動して、http:// [AD CSサーバーのIP] /certsrv へアクセスして、「保留中の証明書の要求の状態」を押します。
- 以下のリンクが、要求に対して 承認された クライアント証明書 です。
このリンクを、クリックしてください。
ここにリンクが表示されていない場合は、以下の点を確認してください。
・証明書を要求した時と、同じマシン、同じブラウザ を使っているか?
・AD CS サーバー側で、ちゃんと 承認が実施できているか?(否認や削除をしてないか?)
- 以下の赤枠の選択肢を選び、クライアント証明書 をダウンロードします。
- ダウンロードしたファイルは、CertReqコマンドを実行したフォルダへコピーしておきます。
- コマンド画面を 管理者モード で開き、証明書をダウンロードしたフォルダへ "cd" コマンドで移動します。続いて、以下のコマンドを実行して、証明書の受け取り (Accept) を実施します。
CertReq -Accept certnew.p7b
下図の通り、証明書がインストールされた旨のメッセージが表示されれば OK です。
CertReq -Accept コマンドは、事前に CertReq -new コマンドで証明書を要求した処理の後続処理となっていて、"-new" と "-Accept" は対になっています。
そのため、証明書要求を実施していないマシンに クライアント証明書(p7b) を複製して、CertReq -Accept を実施しても、エラーが発生して取り込めません。
さらに、1回の証明書要求(-new) に対して、1回の -Accept しか実施できません。
2回目の -Accept は、プロセッサエラーが発生して取り込めないため、その場合は CertReq -new の実施からやり直してください。
こんなエラーが出たこともありました。
この時は、クライアント PC に 証明機関のルート証明書が入っていない場合でした。
以下の記事を参考に、AD CS サーバーから ルート証明書をダウンロードして、クライアント PC にインポートしてください。
https://qiita.com/carol0226/items/33042c5c639c79832aeb
6.実際に取り込まれた クライアント証明書 を確認するために、証明書ストアを開きます。
certlm.msc コマンドを実行します。
[信頼されたルート証明機関] の配下には、AD CS の名前がついたルート証明書が存在していれば OK です。
[個人] の配下には、発行した クライアント証明書 が 存在していれば OK です。
3. クライアント証明書 の エクスポート
作成したクライアント証明書を、実際で運用に使う クライアント PC へ配置するためには、いちど pfx 形式で エクスポート する必要があります。
クライアント証明書を 右クリックして、pfx ファイルとしてエクスポートしましょう。
4. クライアント証明書 の 配布(インポート)
pfx 化したファイルを、運用する クライアント PC 上へコピーして、インポートします。
インポートが完了したら、802.1x 認証用の証明書として利用可能です。
コンピューター認証用の証明書は、ローカルコンピューターストアへ
ユーザー認証用の証明書は、ユーザーストアへ 配置してください。