Wenn man eine untergeordnete Zertifizierungsstelle installiert, stößt man unter Umständen auf folgendes Verhalten:
- Man beantragt eine Key Usage Erweiterung, die beispielsweise als kritisch markiert ist, oder nicht DigitalSignature beinhaltet.
- Das von der übergeordneten Zertifizierungsstelle ausgestellte Zertifikat beinhaltet jedoch DigitalSignature, und die Key Usage Erweiterung ist als nicht-kritisch markiert.
- Bei der übergeordneten Zertifizierungsstelle handelt es sich um eine Standalone-Zertifizierungsstelle, d.h. ohne Active Directory Integration.
Kennen Sie TameMyCerts? TameMyCerts ist ein Add-On für die Microsoft Zertifizierungsstelle (Active Directory Certificate Services). Es erweitert die Funktion der Zertifizierungsstelle und ermöglicht die Anwendung von Regelwerken, um die sichere Automatisierung von Zertifikat-Ausstellungen zu realisieren. TameMyCerts ist einzigartig im Microsoft-Ökosystem, hat sich bereits in unzähligen Unternehmen auf der ganzen Welt bewährt und steht unter einer freien Lizenz. Es kann über GitHub heruntergeladen und kostenlos verwendet werden. Professionelle Wartung wird ebenfalls angeboten.
Die beantragte Key Usage Erweiterung kann man sich bei einer Zertifikatanforderung mit folgendem Kommandozeilenbefehl anzeigen lassen:
certutil -dump {Zertifikatanforderung}.req
Offensichtlich werden die Anforderungen jedoch von der Standalone-Zertifizierungsstelle ignoriert.
Ein Grund, warum man die beschriebenen Merkmale in der Key Usage Erweiterung sehen möchte, ist das Common PKI (auch bekannt als ISIS-MTT) Zertifikatprofil.
Das für PKI relevante RFC5280 empfiehlt ebenfalls, dass die Key Usage Erweiterung als kritisch markiert werden soll:
When present, conforming CAs SHOULD mark this extension as critical.
Doch warum ignoriert die Zertifizierungsstelle die Angaben in der Zertifikatanforderung? Sehen wir uns zunächst die Anforderung an, bevor sie von der Zertifizierungsstelle ausgestellt wird. Hierzu klicken wir in der Zertifizierungsstellen-Verwaltungskonsole unter Pending Requests auf All Tasks – View Attributes/Extensions…
Im Karteireiter Extensions sehen wir, dass die Key Usage Erweiterung gar nicht aus der Zertifikatanforderung genommen wird, sondern durch das Policy-Modul vorgegeben wird.
Bei einer Active Directory-integrierten Zertifizierungsstelle werden die Einstellungen aus den jeweiligen Zertifikatvorlagen verwendet. Dies ist mangels Zertifikatvorlagen jedoch bei einer Standalone-Zertifizierungsstelle nicht möglich.
Wenn das Policy-Modul bei einer Standalone-Zertifizierungsstelle erkennt, dass die Anforderung für ein Zertifizierungsstellen-Zertifikat ist, werden für die Key Usage Erweiterung folgende Bits erzwungen:
- CERT_DIGITAL_SIGNATURE_KEY_USAGE (0x80)
- CERT_KEY_CERT_SIGN_KEY_USAGE (0x04)
- CERT_CRL_SIGN_KEY_USAGE (0x02)
Darüber hinaus wird die Key Usage Erweiterung als nicht kritisch markiert.
Verantwortlich für dieses Verhalten ist das Flag EDITF_ADDOLDKEYUSAGE. Ob es gesetzt ist, kann man mit folgendem Kommandozeilenbefehl herausfinden:
certutil -v -getreg Policy\EditFlags
Möchte man das beschriebene Verhalten unterbinden, kann man dies mit folgendem Kommandozeilenbefehl durchführen.
certutil -setreg Policy\EditFlags -EDITF_ADDOLDKEYUSAGE
Anschließend muss der Zertifizierungsstellen-Dienst neu gestartet werden, damit die Änderung wirksam wird. Danach kann die Zertifikatanforderung erneut eingereicht werden, und sollte nun korrekt ausgestellt werden.
Nach der Änderung wird die Key Usage Erweiterung weiterhin durch das Policy Modul festgelegt, jedoch werden jetzt die Einstellungen aus dem Zertifikatantrag durchgereicht.
Hier ein Beispiel für eine kritische Key Usage Extension ohne DigitalSignature:
Hier ein Beispiel für eine nicht-kritische Key Usage Extension mit DigitalSignature:
Weiterführende Links:
Externe Quellen
- How to make a stand-alone certification authority that is running Windows Server 2003 with Service Pack 1 or an x64-based version of Windows Server 2003 compliant with ISIS-MTT version 1.1 (Microsoft, archive.org)
- Internet X.509 Public Key Infrastructure Certificate and Certificate Revocation List (CRL) Profile (Internet Engineering Task Force)
- Common PKI (Wikipedia)