Beschreibung des Flags EDITF_ADDOLDKEYUSAGE

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.

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 TasksView 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