【解決方法】AD CS での証明書の発行失敗 (0x80094801 CERTSRV_E_NO_CERT_TYPE)

事象

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 に提出します。