エンタープライズ CA では、証明書を発行する時に証明書テンプレートを利用します。発行に利用できる証明書テンプレートは、エンタープライズ CA 上で公開されている必要があります。
証明書テンプレートを公開する場合、certsrv の管理コンソールから [新規作成] – [発行する証明書テンプレート] をクリックして [証明書テンプレートの選択] の画面を表示したときに、追加したい証明書テンプレートが表示されない問題が発生することがあります。
今回は、[証明書テンプレートの選択] に証明書テンプレートが表示されない問題の原因と解決方法について紹介します。
事象
エンタープライズ CA にて、[証明書テンプレートの選択] にスキーマ バージョン 2 以上の証明書テンプレートが表示されず、新規に公開できないという事象です。詳細を説明していきます。
エンタープライズ CA では公開されている証明書テンプレートのみでしか、証明書を発行することができません。そのため、特定の証明書テンプレートで証明書の発行するには、エンタープライズ CA にてその証明書テンプレートを公開する必要があります。
エンタープライズ CA で公開している証明書テンプレートは、certsrv 管理コンソールの [証明書テンプレート] の一覧から確認することができます。
※画面の右ペインが、公開中の証明書テンプレートの一覧です。
証明書テンプレートの公開する場合、certsrv 管理コンソールにある [証明書テンプレート] を右クリックして、 [新規作成] – [発行する証明書テンプレート] をクリックします。すると、[証明書テンプレートの選択] が表示されて、構成パーティション上で管理されている全ての証明書テンプレートが表示されますが、この選択画面に公開したい証明書テンプレートが表示されないことがあります。
※この一覧にスキーマ バージョンが 1 の証明書テンプレートのみが表示されます。
原因
エンタープライズ 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 が有効となっていない値の場合、今回の問題に該当します。
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