【解決方法】AD CS での証明書の発行失敗 0x80094001(-2146877439 CERTSRV_E_BAD_REQUESTSUBJECT)

事象

Active Directory 証明書サービスで構築した証明機関上で、certsrv の管理コンソールにて CSR を提出したときに、以下のエラー メッセージが記録されて証明書の発行に失敗することがあります。

要求の解析エラー 要求サブジェクト名が無効であるか、または長すぎます。
0x80094001(-2146877439 CERTSRV_E_BAD_REQUESTSUBJECT)
 
 
 

原因

Active Directory 証明書サービスでは、サブジェクト名の文字数は 64 文字までという制限があります。
CSR にて 64 文字の制限を超過する長さの文字数が含まれていると、”0x80094001 (-2146877439 CERTSRV_E_BAD_REQUESTSUBJECT)” エラーとなり、証明書の発行に失敗します。

 

対処策

Active Directory 証明書サービスにて、サブジェクト名の文字数の制限を解除する設定を行います。
レジストリ EnforceX500NameLengths の設定値 を 0 に変更すると文字数の制限が解除され、証明書が正常に発行できます。
レジストリ EnforceX500NameLengths の既定値は 1 です。

対象のレジストリ:

キー:HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\CertSvc\Configuration\<CA 名>
値:EnforceX500NameLengths
型:REG_DWORD
■ 設定手順:

1) CA サーバーに管理者権限をもつユーザーでログオンします。

2) 管理者権限でコマンド プロンプトを開きます。

3) 以下のコマンドを実行して、レジストリ EnforceX500NameLengths の設定値を 0 に変更します。

   certutil -setreg ca\EnforceX500NameLengths 0

実行例:

C:\>certutil -setreg ca\EnforceX500NameLengths 0
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\CertSvc\Configuration\test01-TEST01DC01-CA\EnforceX500NameLengths:

古い値:
EnforceX500NameLengths REG_DWORD = 1

新しい値:
EnforceX500NameLengths REG_DWORD = 0
CertUtil: -setreg コマンドは正常に完了しました。
変更を有効にするには、CertSvc サービスを再起動しなければなりません。

 

4) 以下のコマンドを実行して、Active Directory 証明書サービスを再起動します。

   net stop certsvc && net start certsvc

 

おまけ:切り戻し

対処策の設定を切り戻したい場合は、以下の手順で EnforceX500NameLengths の設定値を 1 に戻してください。

1) CA サーバーに管理者権限をもつユーザーでログオンします。

2) 管理者権限でコマンド プロンプトを開きます。

3) 以下のコマンドを実行して、レジストリ EnforceX500NameLengths の設定値を 0 に変更します。

    certutil -setreg ca\EnforceX500NameLengths 1

4) 以下のコマンドを実行して、Active Directory 証明書サービスを再起動します。

    net stop certsvc && net start certsvc