事象
Active Directory 証明書サービスで構築したエンタープライズ CA に、certsrv の管理コンソールにて CSR を提出したときに、以下のエラー メッセージが記録されて証明書の発行に失敗することがあります。
この要求には証明書のテンプレート情報が含まれていません。0x80094801 (-2146875391 CERTSRV_E_NO_CERT_TYPE)
ポリシー モジュールによって拒否されました 0x80094801, 要求は証明書テンプレートの拡張機能または CertificateTemplate 要求属性を含んでいません。
原因
エンタープライズ CA は証明書テンプレートを指定して証明書を発行する必要があります。
Windows OS 以外の製品で作成した CSR には、どの証明書テンプレートを利用して発行するのかを指定する情報が含まれていません。
証明書テンプレートの情報を含まれていない CSR を、エンタープライズ CA の certsrv の管理コンソールから提出すると証明書の発行に失敗します。
証明書テンプレートとは何かは記事で紹介しています。
CSR に証明書テンプレートの情報が含まれているかどうかは、以下の手順で確認できます。
確認手順
1)任意の Windows OS の端末にログオンします。
2) 端末上の任意のフォルダに CSR を保存します。
3) コマンド プロンプトを開いて、cd コマンドで作業 2 にて CSR を保存したフォルダに移動します。
4) 以下のコマンドを実行します。
certutil -dump <CSR のファイル名>
5) 作業 4 での certutil コマンドの実行結果として、以下の文字列が含まれているかどうか確認します。
属性[x]: 1.2.840.113549.1.9.14 (証明書の拡張機能)
値[x][0], 長さ = bc
証明書の拡張機能: 5
1.3.6.1.4.1.311.20.2: フラグ = 0, 長さ = a
証明書テンプレート名 (証明書の種類)
User
上記に該当する文字列がない場合、CSR に証明書テンプレートの情報は含まれておりません。
CSR に証明書が含まれていない場合、CSR をエンタープライズ CA に提出するときに証明書テンプレートを指定するか、CSR 自体に証明書テンプレートを含めて発行します。
対処策
エンタープライズ CA にて証明書を発行する場合、CSR に証明書テンプレーの情報を付与する必要があります。
証明書の発行にあたり、CSR をエンタープライズ CA に提出するときに証明書テンプレートを指定するか(対処策 A)、CSR 自体に証明書テンプレートを含めて発行します(対処策 B)。
対処策 A
証明機関に CSRの提出は certreq コマンドを利用して行うこともできます。
certreq コマンドに -attrib オプションを指定すると、証明書テンプレートを利用して発行するかを指定することができます。
証明書を提出する作業は、エンタープライズ CA が所属しているドメインに参加している Windows OS で行ってください。
1) ドメインに参加している Windows OS の端末に Domain Admins 権限に所属しているユーザーにログオンします。
2) コマンド プロンプトを開きます。
3) 以下のコマンドを実行して、証明書テンプレートを指定して証明書を提出します。
certreq -submit -attrib “CertificateTemplate:<証明書テンプレート名>” -config <証明機関の場所> <CSR ファイル名> <発行された証明書のファイル名>
<証明機関の場所> は、<CA のホスト名もしくは FQDN>\<CA 名> の形式で記載します。
実行例:
certreq -submit -attrib “CertificateTemplate:Machine” -config CA01.test01.local\test01-CA01-CA svrcert.req svrcert.cer
対処策 B
証明書の発行対象となる端末が Windows OS の場合、CSR の定義ファイルに証明書テンプレートを情報を指定して CSR を作成します。
1) 証明書を発行する対象となる Windows OS の端末にログオンします。
2) メモ帳など任意のテキスト エディターで、新しいテキスト ファイルを作成します。
3) 新しいテキスト ファイルに以下の通り、CSR の定義を入力します。
[NewRequest]
Subject = “CN=PC01”
Exportable = TRUE
KeyLength = 2048
KeySpec = 1
KeyUsage = 0xf0
MachineKeySet = TRUE
[EnhancedKeyUsageExtension]
OID=1.3.6.1.5.5.7.3.1
OID=1.3.6.1.5.5.7.3.2
[RequestAttributes]
CertificateTemplate = Machine
[RequestAttributes] の項目の、CertificateTemplate に証明書の発行に使用する証明書テンプレートを指定します。
また、定義ファイルの中身のその他の項目はサンプルです。
どのような定義ファイルを記載できるかは、以下のマイクロソフトの公式公開情報も参考にしてください。
certreq -new
https://learn.microsoft.com/ja-jp/windows-server/administration/windows-commands/certreq_1#certreq–new
4) 作成した定義ファイルを、拡張子を inf ファイルの形式(cert.inf など)で保存します。
5) コマンド プロンプトを開いて、cd コマンドで inf ファイルを保存したフォルダに移動します。
6) 以下のコマンドを実行して、CSR ファイルを作成します。
certreq -new <定義ファイル名> <CSR ファイル名>
実行例:
certreq -new cert.inf cert.req
7) 作成された CSR ファイル(req のファイル) をエンタープライズ CA に提出します。