Die Beantragung eines Zertifikats schlägt fehl mit der Fehlermeldung "A valid certification authority (CA) configured to issue certificates based on this template cannot be located, or the CA does not support this operation, or the CA is not trusted."

Folgendes Szenario angenommen:

  • Man versucht, ein Zertifikat von einer Active Directory-integrierten Zertifizierungsstelle (Enterprise Certification Authority) zu beantragen.
  • Hierzu verwendet man die Microsoft Management Konsole (MMC), entweder für den angemeldeten Benutzer (certmgr.msc) oder für den Computer (certlm.msc).
  • Man bekommt die gewünschte Zertifikatvorlage jedoch nicht zur Auswahl angezeigt, obwohl sie korrekt auf der Zertifizierungsstelle veröffentlicht wurde.
  • Der angemeldete Benutzer hat auch die notwendigen Berechtigungen, Zertifikate von der betreffenden Zertifikatvorlage zu beantragen (Enroll).
  • In der Liste der verfügbaren Zertifikatvorlagen innerhalb der MMC lässt man sich alle Zertifikatvorlagen anzeigen. Bei der gewünschten Zertifikatvorlage steht:
Cannot find Object or property.
A valid certification authority (CA) configured to issue certificates based on this template cannot be located, or the CA does not support this operation, or the CA is not trusted.

Dieser Fehler kann beispielsweise dann auftreten, wenn der angemeldete Benutzer keine Rechte hat, Zertifikate von der Zertifizierungsstelle zu beantragen.

Ursachenforschung

Nebst der Berechtigung innerhalb der Zertifikatvorlage gibt es auch direkt auf der Zertifizierungsstelle ein Recht, um Zertifikate von ihr beziehen zu können (Request Certificates).

Den entsprechenden Dialog erreicht man in der Verwaltungskonsole der Zertifizierungsstelle (certsrv.msc) mit Rechtsklick auf den CA-Namen, dann "Eigenschaften", im Karteireiter "Sicherheit". In der Standardeinstellung haben die authentifizierten Benutzer (Authenticated Users) das Recht, Zertifikate zu beantragen.

Im vorliegenden Fall wurde im Sicherheits-Karteireiter der Zertifizierungsstelle dieses Recht auch entsprechend angezeigt. Dennoch konnten keine Zertifikate von der Zertifizierungsstelle beantragt werden. Testweise wurde die Zertifikatvorlage auf einer anderen Zertifizierungsstelle veröffentlicht, wo es beantragt werden konnte.

Die im Karteireiter "Sicherheit" eingestellten Berechtigungen werden an zwei Stellen abgespeichert:

  • In der Registierungsdatenbank des Zertifizierungsstellen-Dienstes unter HKLM:\CurrentControlSet\Services\CertSvc\Configuration\<Name-der-Zertifizierungsstelle>\ im Wert "Security".
  • In der Zugangskontrollliste (Access Control List, ACL) des "Public Key Services" Objektes im Active Directory im zur Zertifizierungsstelle gehörenden pKIEnrollmentService Objekt unterhalb CN=Enrollment Services. Wenn die Sicherheitsberechtigungen durch die Verwaltungskonsole der Zertifizierungsstelle verändert wurden, wird durch das Computerkonto der Zertifizierungsstelle das Active Directory Objekt entsprechend aktualisiert.

Den Wert innerhalb der Registrierungsdatenbank kann man sich entweder über die Verwaltungskonsole der Zertifizierungsstelle (certsrv.msc) oder über den folgenden Kommandozeilenbefehl ansehen:

certutil -getreg CA\Security

Beispiel:

certutil -getreg CA\Security
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\CertSvc\Configuration\Fabrikam Issuing CA 1\Security:
Security REG_BINARY =
Allow Enroll NT AUTHORITY\Authenticated Users
Allow CA Administrator Certificate Manager CORP\Domain Admins
Allow CA Administrator Certificate Manager CORP\Enterprise Admins
Allow CA Administrator Certificate Manager BUILTIN\Administrators
CertUtil: -getreg command completed successfully.

Die Berechtigungen auf dem Active Directory Objekt kann man sich entweder über den ADSI Editor (adsiedit.msc) anzeigen lassen, oder über die Kommandozeile.

Der ADSI Editor eignet sich nur bedingt für diese Aufgabe, da ADCS-spezifische Berechtigungen teils nicht aufgelöst werden. Besser eignet sich die Variante per Kommandozeile:

certutil [Options] -ds [CN]

Mit der Option -v, dem CN (Gemeinsamer Name, Common Name) des entsprechenden pKIEnrollmentService Objekts und dem nTSecurityDescriptor Attributs sieht der Befehl beispielsweise wie folgt aus:

certutil -ds -v "CN=<Common-Name-der-CA>,CN=Enrollment Services,CN=Public Key Services,CN=Services,CN=Configuration,<Root-DN-der-Gesamtstruktur>" nTSecurityDescriptor 

Im Fall der betreffenden Zertifizierungsstelle kam diese Ausgabe zutage:

Allow Full Control  CORP\Enterprise Admins
Allow Full Control CORP\ADCSCA03$
Allow Read NT AUTHORITY\Authenticated Users
Allow Full Control CORP\Enterprise Admins
Allow Full Control CORP\Domain Admins

Wie man sieht, fehlt hier die Berechtigung für die authentifizierten Benutzer, Zertifikate zu beantragen. Offenbar sind Registrierungsdatenbank und Active Directory nicht synchron.

Ursache

Im vorliegenden Fall wurde die Zertifizierungsstelle auf einen neuen Server migriert. Hierfür wurde eine Sicherung der Zertifizierungsstelle erstellt und auf einem neuen Server wiederhergestellt. Um zu verhindern, dass während der Migration der Zertifizierungsstelle Zertifikate beantragt werden, wurde dem Authentifizierte Benutzer Prinzipal übergangsweise die Rechte zur Beantragung von Zertifikaten entzogen. Dies wurde allerdings gemacht, nachdem die Registrierung der Zertifizierungsstelle auf dem Quell-Server gesichert wurde.

Somit wurde auf dem Ziel-Server eine Registrierung wiederhergestellt, die den Authentifizierten Benutzern scheinbar die Beantragung von Zertifikaten erlaubt, aber das pKIEnrollmentService Objekt im Active Directory wurde nicht wieder korrekt aktualisiert.

Lösung

Die Lösung war, die Berechtigung lokal auf der Zertifizierungsstelle noch einmal zu entfernen und wieder neu einzutragen. Anschließend war das pKIEnrollmentService Objekt wieder synchron mit der Zertifizierungsstelle:

Weiterführende Links:

Externe Quellen