本記事はマイクロソフト社員によって公開されております。
こんにちは。Windows Commercial Support Directory Services サポートチームです。
今回は NTAuth ストアの証明書の登録方法について紹介します。
1. NTAuth ストアについて
Windows PC には証明書ストアという証明書の格納場所があり、その中には NTAuth という特殊なストアが存在します。NPS の EAP-TLS 認証やスマートカードログオンを行うには、このストアにユーザー証明書を発行した CA の登録が必要です。
2. 登録方法について
NTAuth ストアの証明書の登録方法は以下の2種類があります。
方法 A
certutil -enterprise -addstore NTAuth [クライアント証明書を発行した CA の証明書 (xxxx.cer) のフルパス]
例)C:\temp 配下に CA の証明書 cacert.cer がある場合、下記のようにコマンドを実行します。
certutil -enterprise -addstore NTAuth C:\temp\cacert.cer
上記コマンドは端末の NTAuth ストアに手動で CA 証明書の登録を行います。
方法 B
certutil -dspublish -f [クライアント証明書を発行した CA の証明書 (xxxx.cer) のフルパス] NTAuthCA
例)C:\temp 配下に CA の証明書 cacert.cer がある場合、下記のようにコマンドを実行します。
certutil -dspublish -f C:\temp\cacert.cer NTAuthCA
上記コマンドはドメインコントローラー上で CA 証明書を公開し、各ドメイン端末に配布するように構成します。コマンド実行後、構成パーティション上の [Services] - [Public Key Services] 配下にある NTAuthCertificates オブジェクトの cACertificate 属性に CA 証明書が登録されます。certutil -dspublish は AD 上に CA 証明書を公開するためのコマンドであり、NTAuth ストア自体に直接登録するコマンドではありません。AD 上に CA 証明書を公開した後、各端末でグループポリシーが適用されるタイミングで自動的に NTAuth ストアに登録されます。すぐに反映させたい場合は、以下のコマンドを実行してください。
gpupdate /force
3. 注意点
certutil -enterprise -addstore の注意点
この方法で登録した証明書は、消失する可能性があります。NTAuthストアは、ドメインコントローラーの NTAuthCertificates オブジェクトと同期する際に、NTAuthCertificates オブジェクトの内容で上書きされます。そのため、ドメインコントローラーがNTAuthCertificates オブジェクトで保持する CA 証明書に該当のものが含まれていない場合、同期時に削除されます。消失する理由について、同期の動作詳細とともに後述します。
ドメインコントローラーとの同期の詳細
(1). クライアントは、自身がアクセスしている DC の “CN=Public Key Services,CN=Services,CN=Configuration,DC=xxxx,DC=xxxx” コンテナ配下に存在する “certificationAuthority” オブジェクトを全検索します。具体的には、以下の 3 つのオブジェクトが検索されます。
(1-1) CN=<CA 名>,CN=AIA,CN=Public Key Services,CN=Services,CN=Configuration,DC=xxx,DC=xxx
(1-2) CN=<CA 名>,CN=Certification Authorities,CN=Public Key Services,CN=Services,CN=Configuration,DC=xxx,DC=xxx
(1-3) CN=NTAuthCertificates,CN=Public Key Services,CN=Services,CN=Configuration,DC=xxx,DC=xxx
(2). クライアントは、1. で検索した (1)(2)(3) の個々の “certificationAuthority” オブジェクトの USN (uSNChanged) 属性を確認し、最大値を取得します。この USN は CA 証明書を更新した場合のように、該当のオブジェクトに対して更新があった場合に増加します。
(3). クライアントは、2. で確認した (AD 上の) USN の最大値を、クライアントの以下のレジストリ キー配下に格納されている “AEMaxUSN” と比較します。
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Cryptography\AutoEnrollment\AEDirectoryCache\<DC の invocationID>
(4). 上記 1~3 の処理の結果、以下のいずれかの条件に該当した場合、クライアントはローカルのエンタープライズの証明書ストア (NTAuth ストア) を更新 (AD と同期) します。
・ クライアントに (3) のレジストリが “無い” 場合
・ クライアントの (3) のレジストリ配下の AEMaxUSN 値が AD 上の値と “差異がある場合”
例えば、ドメインに新しいドメインコントローラーを追加した際などには、その時点では、AEDirectoryCache 配下に <新しい DC の InvocationID> を含むレジストリは存在しません。これをトリガーとして、サーバーは改めて AD データベースの NTAuth オブジェクトと同期を行われますが、その時点で同期されるため、方法 A で NTAuth にインポートした証明書が消えることになります。
4. クライアント端末の NTAuth ストアの確認方法
NTAuth ストアは [証明書] スナップインで表示されない特殊なストアとなります。
そのため確認するにはコマンドプロンプトにて下記コマンドを実行して確認します。
certutil -v –store -enterprise NTAuth
5. ドメインコントローラーの NTAuthCertificates オブジェクトの確認方法
コマンドによる確認方法
ドメインコントローラーの NTAuthCertificates オブジェクトの CA 証明書をコマンドで確認する場合は、以下のコマンドを実行します。
certutil -viewstore "CN=NTAuthCertificates,CN=Public Key Services,CN=Services,CN=Configuration,DC=xxx,DC=xxx"
例) ドメインが contoso.com の場合、下記のようにコマンドを実行します。
certutil -viewstore "CN=NTAuthCertificates,CN=Public Key Services,CN=Services,CN=Configuration,DC=contoso,DC=com"
実行すると GUI で NTAuthCertificates 内の証明書一覧が表示されます。複数証明書がある場合、[その他] をクリックいただくことで、他の証明書が参照可能です。一覧の中で選択したものが、「証明書の選択」に表示されます。
GUI による確認方法
ドメインコントローラーの NTAuthCertificates オブジェクトの CA 証明書を GUI で確認する場合は、以下の手順となります。
(1). エンタープライズ CA 上で pkiview.msc を開きます。
(2). [エンタープライズ PKI] を右クリックし、[AD コンテナーの管理] をクリックし、[NTAuthCertificates] タブを参照します。
(3). 表示される一覧の証明書が、NTAuthCertificates オブジェクトに存在する証明書となります。
本投稿が少しでも皆様のお役に立てば幸いです。
※ 本情報の内容 (リンク先などを含む) は、作成日時点でのものであり、予告なく変更される場合があります。
更新履歴
2024/10/24 : 本ブログの公開