【解決方法】[証明書テンプレートの選択] に証明書テンプレートが表示されない

エンタープライズ CA では、証明書を発行する時に証明書テンプレートを利用します。発行に利用できる証明書テンプレートは、エンタープライズ CA 上で公開されている必要があります。

証明書テンプレートを公開する場合、certsrv の管理コンソールから [新規作成] – [発行する証明書テンプレート] をクリックして [証明書テンプレートの選択] の画面を表示したときに、追加したい証明書テンプレートが表示されない問題が発生することがあります。

今回は、[証明書テンプレートの選択] に証明書テンプレートが表示されない問題の原因と解決方法について紹介します。

 

事象

エンタープライズ CA にて、[証明書テンプレートの選択] にスキーマ バージョン 2 以上の証明書テンプレートが表示されず、新規に公開できないという事象です。詳細を説明していきます。

エンタープライズ CA では公開されている証明書テンプレートのみでしか、証明書を発行することができません。そのため、特定の証明書テンプレートで証明書の発行するには、エンタープライズ CA にてその証明書テンプレートを公開する必要があります。

エンタープライズ CA で公開している証明書テンプレートは、certsrv 管理コンソールの [証明書テンプレート] の一覧から確認することができます。


※画面の右ペインが、公開中の証明書テンプレートの一覧です。

証明書テンプレートの公開する場合、certsrv 管理コンソールにある [証明書テンプレート] を右クリックして、 [新規作成] – [発行する証明書テンプレート] をクリックします。すると、[証明書テンプレートの選択] が表示されて、構成パーティション上で管理されている全ての証明書テンプレートが表示されますが、この選択画面に公開したい証明書テンプレートが表示されないことがあります。


※この一覧にスキーマ バージョンが 1 の証明書テンプレートのみが表示されます。

 

スキーマ バージョンが 2 以上の証明書テンプレートが、[証明書テンプレートの選択] の一覧に表示されずに公開できません。
 
 

原因

エンタープライズ CA は Active Directory ドメイン サービスと連携しており、CA の情報を構成パーティションで管理されています。エンタープライズ CA の pKIEnrollmentServices オブジェクト(証明機関の登録サービスのオブジェクト) の flags 属性にて CA のプロパティ設定を管理しておりますが、この設定値にて CA_FLAG_CA_SERVERTYPE_ADVANCED フラグが立っていない場合、スキーマ バージョン 2 以上の証明書テンプレートが利用できない動作となります。

 

pKIEnrollmentServices オブジェクトの flags 属性の設定値

CA_FLAG_NO_TEMPLATE_SUPPORT 0x00000001
CA_FLAG_SUPPORTS_NT_AUTHENTICATION 0x00000002
CA_FLAG_CA_SUPPORTS_MANUAL_AUTHENTICATION 0x00000004

CA_FLAG_CA_SERVERTYPE_ADVANCED

0x00000008

 

CA_FLAG_CA_SERVERTYPE_ADVANCED フラグ(0x08)は、エンタープライズ CA がスキーマ バージョンが 2 以上の証明書テンプレートをサポートしていることを示すフラグとなります。flags 属性にて CA_FLAG_CA_SERVERTYPE_ADVANCED フラグがセットされている場合、そのエンタープライズ CA ではスキーマ バージョンが 2 以上の証明書テンプレートも利用可能です。一方、CA_FLAG_CA_SERVERTYPE_ADVANCED フラグがセットされていない場合は、そのエンタープライズ CA ではスキーマ バージョンが 1 の証明書テンプレートしか利用できません。

 

そのため、[証明書テンプレートの選択] の画面に、スキーマ バージョン 1 の証明書テンプレートしか表示されない場合は、flags 属性に CA_FLAG_CA_SERVERTYPE_ADVANCED フラグがセットされていない可能性があります。

 

確認方法

flags 属性に CA_FLAG_CA_SERVERTYPE_ADVANCED フラグがセットされているか確認します。エンタープライズ CA 上にある任意のドメイン コントローラーから確認できます。

1) エンタープライズ CA が存在するドメインの任意のドメイン コントローラーに管理者権限をもつユーザーでログオンします。

2) [ファイル名を指定して実行] を開き、adsiedit.msc と入力して [OK] をクリックします。

3) メニューにて [操作] – [接続] をクリックします。

4) [接続の設定] にて、[接続ポイント] の項目にて [既知の名前付けコンテキストを選択する] の項目にて “構成” を選択して [OK] をクリックします。 

5) 画面の左ペインより、[CN=Configuration,DC=<ドメイン名>] – [CN=Services] – [CN=Public Key Services] – [CN=Enrollment Services] を選択します。

6) 画面の右ペインにて、<CA 名> のオブジェクトをダブルクリックしてプロパティ設定を開きます。

7) [属性エディター] タブにて、flags 属性の値を確認します。

8) flags 属性値が 0x8 が有効となっていない値の場合、今回の問題に該当します。

 

エンタープライズ  CA での flags 属性の既定値は 10 です。
10 は 0x2 + 0x8 なので、CA_FLAG_CA_SERVERTYPE_ADVANCED フラグは有効です。

この問題に該当するケースの多くの場合、2 となっていることが多いです。
 
 

対処策

CA サーバーの pKIEnrollmentServices オブジェクトの flags 属性にて、CA_FLAG_CA_SERVERTYPE_ADVANCED フラグを有効にします。

1) CA サーバーに、管理者ユーザーでログオンします。

2) 管理者権限でコマンド プロンプトを起動します。

3) 以下のコマンドを実行し、CA オブジェクトのサーバーの flags 属性を更新するためのレジストリを設定します。
このレジストリ設定は、次の 4 の手順で、AD CS サービスを再起動されると反映されます。

  certutil -setreg CA\SetupStatus +SETUP_UPDATE_CAOBJECT_SVRTYPE

 

4) 以下のコマンドを実行し、AD CS サービスを再起動します。

net stop certsvc & net start certsvc