事象
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 です。
対象のレジストリ:
値: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