Skip to content

Est. 2011ยทMicrosoft Partner 7033487ยทDelivery under 3 minยทSupport 7 days a week

Your vault is empty.

Free Fix 0x80094012

Error 0x80094012: certificate template permissions deny the enrolling account

9 min read Updated October 4, 2026 Windows Server: AD, DNS & Group Policy

Fix it now

0x80094012 is CERTSRV_E_TEMPLATE_DENIED: the permissions on the certificate template do not allow the current user to enrol for this type of certificate. Nothing is wrong with the key, the request or the certification authority. Its neighbour 0x80094011 is the same refusal one level up, at the CA itself.

Run these on the machine that is failing to enrol, in an elevated Command Prompt

certutil -template
certutil -CATemplates
gpupdate /force
certutil -pulse
  1. Work out which account is really enrolling. For a computer certificate that is the machine account, not the person at the keyboard – and a machine only picks up new group membership after a reboot.
  2. Open the certificate templates console from the Certification Authority console: right-click Certificate Templates and choose Manage. Find the template and open its Security tab.
  3. Grant the requesting principal – ideally a group – both Read and Enroll. Add Autoenroll as well if autoenrolment is meant to issue this certificate.
  4. Then check the CA itself: in the Certification Authority console, open the properties of the CA and its Security tab, and confirm the same principal has Request Certificates.
  5. Refresh membership and retry: reboot a computer, or sign out and back in for a user, then gpupdate /force followed by certutil -pulse.

Microsoft’s published minimum is precise: the requesting user or machine needs Read and Enroll on the template, and Read on the certification authority object. Anything less produces this code.

If the certificate issues, you are finished. The next section covers the cases where the permissions look right and enrolment still fails.

Why it happens

Enrolment permission is checked in two places and people usually look at one. The certificate template is an Active Directory object with its own security descriptor, and the certification authority has a security tab of its own. A principal that can reach the CA but has no Enroll right on the template gets 0x80094012; a principal with template rights but no rights at the CA gets 0x80094011, CERTSRV_E_ENROLL_DENIED, which says the permissions on this certification authority do not allow the current user to enrol for certificates.

The identity being checked is the thing to establish first. A machine certificate is requested by the computer account, so granting the administrator who is testing it Enroll rights changes nothing. Group membership is equally literal: a computer added to a group does not have that membership until it reboots, and a user does not have it until they sign in again, because the token was built at logon.

Two other codes in this family look like permission problems and are not. 0x80094009 is CERTSRV_E_RESTRICTEDOFFICER, an operation denied because it can only be performed by a certificate manager who is allowed to manage certificates for that requester – a certificate manager restriction on the CA rather than an enrolment right. 0x80094807 is CERTSRV_E_BAD_TEMPLATE_VERSION, the request template version is newer than the supported template version, which is a capability mismatch and no amount of ACL editing will fix it.

The wrong principal has the rights

You have this one if A user can enrol by hand and the machine cannot, or vice versa.

  1. Establish the requesting identity: computer certificates are requested by the computer account.
  2. Grant Read and Enroll to a group that contains that identity, not to an individual object.
  3. Reboot the machine, or sign the user out and back in, so the new membership is in the token.

The template is fine and the CA is not

You have this one if The code is 0x80094011 rather than 0x80094012, or the template’s Security tab already grants Enroll.

  1. Open the CA’s properties, Security tab, and confirm the principal has Request Certificates.
  2. Remember the published minimum: Read on the certification authority object as well as Read and Enroll on the template.
  3. Retry the request after the change; the CA does not need restarting for a security change.

Autoenrolment is not configured, so nothing is asking

You have this one if Manual enrolment works, and nothing is issued automatically.

  1. Grant Autoenroll on the template as well as Read and Enroll.
  2. Confirm the Certificate Services Client autoenrolment policy is enabled for the right object type – computer or user – in Group Policy.
  3. Trigger it with gpupdate /force then certutil -pulse rather than waiting for the next cycle.

The refusal is not about enrolment rights at all

You have this one if The code is 0x80094009 or 0x80094807 rather than 0x80094012.

  1. For 0x80094009, look at certificate manager restrictions on the CA: the operation can only be performed by a manager allowed to manage certificates for that requester.
  2. For 0x80094807, compare the template’s compatibility settings with the CA that is being asked to issue it. The request is using a template version newer than the CA supports.
  3. Neither is fixed by editing the template’s Security tab.

Full reference

The four codes side by side

Code Constant Published meaning
0x80094012 CERTSRV_E_TEMPLATE_DENIED The permissions on the certificate template do not allow the current user to enrol for this type of certificate
0x80094011 CERTSRV_E_ENROLL_DENIED The permissions on this certification authority do not allow the current user to enrol for certificates
0x80094009 CERTSRV_E_RESTRICTEDOFFICER The operation is denied. It can only be performed by a certificate manager that is allowed to manage certificates for the current requester
0x80094807 CERTSRV_E_BAD_TEMPLATE_VERSION The request template version is newer than the supported template version

The permission set that actually has to be there

Object Permission Held by
Certificate template Read The requesting user or machine
Certificate template Enroll The requesting user or machine
Certificate template Autoenroll Only where autoenrolment should issue it
Certification authority object Read The requesting user or machine
Certification authority Request Certificates The requesting user or machine

Do not remove Authenticated Users from a template’s ACL without adding every CA computer account with Read. Authenticated Users includes the certification authority object itself, and if the enterprise CA can no longer read the template in Active Directory, requests against it fail – with a different code, 0x80094800, and a warning on the CA at service start.

Checking from the client rather than the console

  • certutil -template lists the enrolment policy templates as the client sees them, which is the fastest way to tell whether the client can see the template at all.
  • certutil -CATemplates run on the CA lists what that CA is configured to issue.
  • certutil -pulse triggers an autoenrolment cycle without waiting.
  • If the template appears for one user and not another, the difference is a group membership and a token, not the template.

Group membership and tokens

This is the single most common reason a correct permission change appears not to work. Windows builds the access token at logon, and adds group memberships to it then. A user added to a group half an hour ago is not in that group as far as any running session is concerned, and a computer added to a group is not in it until it restarts. Before you go back to the template and add another entry, sign out or reboot and try once more.

Design notes worth writing down

  • Grant enrolment rights to groups, never to individual users or computers. The ACL is a template-wide object and it becomes unreadable quickly.
  • Keep one template per purpose. Templates that serve two purposes end up with permission sets that grant more than either purpose needs.
  • Record which group holds Enroll on which template somewhere outside the console, because the console is a poor audit trail.
  • Where a template supersedes an older one, check the permissions on both: the old one usually still issues.

Every code this article covers

Code What it points at Source
0x80094012 CERTSRV_E_TEMPLATE_DENIED: the permissions on the certificate template do not allow the current user to enrol for this type of certificate Microsoft Learn
0x80094011 CERTSRV_E_ENROLL_DENIED: the permissions on this certification authority do not allow the current user to enrol for certificates Microsoft Learn
0x80094009 CERTSRV_E_RESTRICTEDOFFICER: the operation can only be performed by a certificate manager allowed to manage certificates for that requester Microsoft Learn
0x80094807 CERTSRV_E_BAD_TEMPLATE_VERSION: the request template version is newer than the supported template version Microsoft Learn

Confirm the fix worked

  1. The certificate issues to the intended principal on a machine that was failing.
  2. The template’s Security tab shows Read and Enroll for a group containing that principal.
  3. The CA’s Security tab shows Request Certificates for the same group.
  4. certutil -template on the client lists the template.
  5. For autoenrolment, certutil -pulse produces the certificate without a manual request.

Questions people ask about this

Do I need to buy anything to fix this?

No. Enrolment permissions are access control entries on objects you already own.

I granted Enroll and it still fails.

Check the identity. A computer certificate is requested by the computer account, and a computer picks up new group membership only after a reboot.

What is the difference between 0x80094012 and 0x80094011?

The first is the template’s permissions, the second is the CA’s. Microsoft’s minimum is Read and Enroll on the template, and Read on the certification authority object.

Is Authenticated Users safe to remove from a template?

Only if you add every CA computer account with Read at the same time. The enterprise CA has to be able to read the template, and removing that group is a documented way of breaking issuance.

Why would I see 0x80094807 instead?

Because the request uses a template version newer than the CA supports. That is a compatibility problem between the template and the CA, and permissions have nothing to do with it.

Related error codes

Was this article helpful?

Your feedback helps us improve our documentation.

Related articles

Free Fix Event ID 12: the PDC emulator has no external time source configured Free Fix Event ID 5781: dynamic registration of domain controller DNS records failed Free Fix Event ID 1046: the DHCP server is not authorised in Active Directory Free Fix Event ID 7016: a Group Policy client-side extension never finishes processing
โ† Back to Knowledge Base