Grundlagen: Konfigurationsdatei für die Zertifizierungsstelle (capolicy.inf)

Die capolicy.inf beinhaltet grundlegende Einstellungen, die vor der Installation einer Zertifizierungstelle festgelegt werden können oder sollten. vereinfacht ausgedrückt kann man sagen, dass keine Zertifizierungsstelle ohne sie installiert werden sollte.

Erstellen einer capolicy.inf

Version

Jede capolicy.inf muss mit der "Version" Erweiterung mit folgendem Inhalt beginnen.

[Version]
Signature= "$Windows NT$"

Strings

In der "Strings" Sektion können Textvariablen definiert werden, beispielsweise um Objektidentifizierer in ein einfach lesbares Format umzuwandeln.

[Strings]
szOID_NAME_CONSTRAINTS = "2.5.29.30"

Extensions

Die "Extensions" Sektion ermöglicht, Erweiterungen im Zertifikatantrag (und somit im daraus resultierenden Zertifikat) zu definieren oder zu verändern.

Beispiel: Setzen der "Name Constraints" Erweiterung einer ausstellenden Zertifizierungsstelle, um DNS-Namen im Subject Alternative Name für "adcslabor.de" zu erlauben und die Nutzung des Common Name zu unterbinden.

[Extensions]
Critical = %szOID_NAME_CONSTRAINTS%
%szOID_NAME_CONSTRAINTS% = "{text}"
continue = "SubTree=Include&"
continue = "DNS = adcslabor.de&"
continue = "SubTree=Exclude&"
continue = "DIRECTORYNAME = CN=&"

[Strings]
szOID_NAME_CONSTRAINTS = "2.5.29.30"

Gemäß RFC 5280 werden Name Constraints bei Zertifikaten für Stammzertifizierungsstellen ignoriert.

Beispiel: Verändern der "Key Usage" Erweiterung einer Stammzertifizierungsstelle. Entfernen von "Digital Signature" und setzen der "Key Usage" Erweiterung als kritisch.

[Extensions]
2.5.29.15 = AwIBBg==
Critical = 2.5.29.15

Beispiel: Entfernen der Erweiterungen "CA Version" und "Previous CA Certificate Hash" aus einem Zertifikat einer Stammzertifizierungsstelle.

[Extensions]
1.3.6.1.4.1.311.21.1= ; szOID_CERTSRV_CA_VERSION
1.3.6.1.4.1.311.21.2= ; szOID_CERTSRV_PREVIOUS_CERT_HASH

Siehe hierzu auch folgende Artikel:

BasicConstraintsExtension

Die Sektion "BasicConstraintsExtension" erlaubt, die Einschränkung der Pfadlänge (Path Length Constraint) eines Zertifizierungsstellen-zertifikats zu definieren. Diese Einstellung sollte nicht auf Zertifikate einer Stammzertifizierungsstelle angewendet werden, um Flexibilität zu bewahren. Stattdessen sollte die Erweiterung für Zertifikate ausstellender Zertifizierungsstellen konfiguriert werden.

[BasicConstraintsExtension]
PathLength=0
Critical=TRUE

Conforming CAs MUST include this extension in all CA certificates that contain public keys used to validate digital signatures on certificates and MUST mark the extension as critical in such certificates.

https://tools.ietf.org/html/rfc5280#section-4.2.1.9

Siehe hierzu auch Artikel "Grundlagen: Einschränkung der Pfadlänge (Path Length Constraint)".

PolicyStatementExtension

[PolicyStatementExtension]
Policies=InternalPolicy

[InternalPolicy]
OID=1.3.6.1.4.1.99999.300.2.1.4.3.1
Notice=CPS is to be found at: http://pki.adcslabor.de/CPS/index.html
URL=http://pki.adcslabor.de/CPS/index.html

Die Trusted Platform Module (TPM) Key Attestation kann optional mit Ausstellungsrichtlinien eingesetzt werden. Ist geplant, diese zu verwenden, ist es sinnvoll, die hierfür definierten Ausstellungsrichtlinien in das Zertifizierungsstellen-Zertifikat aufzunehmen.

Siehe hierzu auch Artikel "Konfigurieren der Trusted Platform Module (TPM) Key Attestation".

Alternativ kann man auch den AnyPolicy Objektidentifizierer aufnehmen:

[PolicyStatementExtension]
Policies=AllIssuancePolicy

[AllIssuancePolicy]
OID=2.5.29.32.0

Dieses Vorgehen sollte vermieden werden, ist gemäß RFC 5280 aber explizit erlaubt.

When a CA does not wish to limit the set of policies for certification paths that include this certificate, it MAY assert the special policy anyPolicy, with a value of { 2 5 29 32 0 }.

https://tools.ietf.org/html/rfc5280#section-4.2.1.14

Hier eine Liste gängiger (allgemeiner) Ausstellungsrichtlinien.

OIDBeschreibung
2.5.29.32.0All Issuance Policies (AnyPolicy)
1.3.6.1.4.1.311.21.32TPM Key Attestattion: User Credentials: (Low Assurance)
1.3.6.1.4.1.311.21.31TPM Key Attestattion: Endorsement Certificate: (Medium Assurance)
1.3.6.1.4.1.311.21.30TPM Key Attestattion: Endorsement Key: (High Assurance)

EnhancedKeyUsageExtension

In der "EnhancedKeyUsageExtension" Sektion kann die "Enhanced Key Usage" Erweiterung eines Zertifizierungsstellen-Zertifikats bearbeitet werden, um hierdurch den Bereich für die Ausstellung von Zertifikaten einzugrenzen.

Microsoft verwendet den Terminus "Enhanced Key Usage", die korrekte Bezeichnung gemäß RFC 5280 ist allerdings "Extended Key Usage".

[EnhancedKeyUsageExtension]
OID=1.3.6.1.5.5.7.3.1 ; Client Authentication
OID=1.3.6.1.5.5.7.3.2 ; Server Authentication
OID=1.3.6.1.5.5.7.3.9 ; OCSP Signing
OID=1.3.6.1.4.1.311.21.5 ; Private Key Archival
Critical=FALSE

Betreffend Einschränkungen der Extended Key Usages in Zertifizierungsstellen-Zertifikaten schweigt sich das RFC 5280 leider aus. Die Bewertung muss somit für jeden Anwendungsfall einzeln vorgenommen werden.

Das für die Zertifikatverarbeitung in den gängigen Browser zuständige CA/Browser Forum (CAB) empfiehlt beispielsweise für SSL die Einschränkung der Extended Key Usages einer Zertifzierungsstelle und rät dazu, die Erweiterung als nicht kritisch zu markieren.

Hinsichtlich Smart Card Anmeldung ignorieren Domänencontroller die Einschränkung der Extended Key Usages in der Standardeinstellung aber beispielsweise komplett.

Siehe hierzu auch folgende Artikel:

Neben den vorgesehenen Extended Key Usages sollten Einschränkungen auch immer "Private Key Archival" und "OCSP Signing" beinhalten. Wird ein Registrierungsdienst für Netzwerkgeräte (NDES) an die Zertifizierungsstelle angebunden, ist zusätzlich das "Certificate Request Agent" Extended Key Usage erforderlich.

Hier eine Liste gängiger Extended Key Usages:

OIDBeschreibung
1.3.6.1.4.1.311.20.2.1Certificate Request Agent
1.3.6.1.5.5.7.3.2Client Authentication
1.3.6.1.5.5.7.3.3Code Signing
1.3.6.1.4.1.311.10.3.13Lifetime Signing
1.3.6.1.4.1.311.10.3.12Document Signing
1.3.6.1.4.1.311.80.1Document Encryption
1.3.6.1.4.1.311.10.3.4Encrypting file system
1.3.6.1.4.1.311.10.3.4.1File Recovery
1.3.6.1.5.5.7.3.5IP Security End System
1.3.6.1.5.5.8.2.2IP Security IKE Intermediate
1.3.6.1.5.5.7.3.6IP Security Tunnel Endpoint
1.3.6.1.5.5.7.3.7IP Security User
1.3.6.1.4.1.311.10.3.11Key Recovery
1.3.6.1.5.2.3.5KDC Authentication
1.3.6.1.4.1.311.10.3.1Microsoft Trust List Signing
1.3.6.1.4.1.311.10.3.10Qualified Subordination
1.3.6.1.4.1.311.10.3.9Root List Signer
1.3.6.1.5.5.7.3.4Secure E-mail
1.3.6.1.5.5.7.3.1Server Authentication
1.3.6.1.4.1.311.20.2.2Smartcard Logon
1.3.6.1.5.5.7.3.8Time Stamping gemäß RFC 3161
1.3.6.1.5.5.7.3.9OCSP Signing
1.3.6.1.4.1.311.54.1.2Remote Desktop Authentication
1.3.6.1.4.1.311.21.5Private Key Archival
2.16.840.1.113741.1.2.3Intel Advanced Management Technology (AMT) Provisioning

NameConstraintsExtension

Erlaubt die Definition von Namenseinschränkungen für das Zertifizierungsstellen-Zertifikat.

[NameConstraintsExtension]
Include = PermittedSubtrees
Critical = True

[PermittedSubtrees]
DirectoryName = CN=ADCS Labor Test Issuing CA 1-Xchg
DNS = .intra.adcslabor.de

Siehe Artikel "Grundlagen: Namenseinschränkungen (Name Constraints)".

Certsrv_Server

In dieser Sektion können Einstellungen für den Zertifizierungsstellen-Prozess festgelegt werden.

ParameterBeschreibung
RenewalKeyLengthWird nur bei Erneuerung des Zertifizierungsstellenzertifikats mit einem neuen Schlüsselpaar angewendet. Bezeichnet die in diesem Fall zu verwendende Schlüsselgröße.
RenewalValidityPeriodBetrifft nur Stammzertifizierungsstellen.
Wird nur bei Erneuerung des Zertifizierungsstellenzertifikats einer Stammzertifizierungsstelle angewendet (diese bestimmt selbst die eigene Zertifikatgültigkeit).
RenewalValidityPeriodUnitsBetrifft nur Stammzertifizierungsstellen.
Wird nur bei Erneuerung des Zertifizierungsstellenzertifikats einer Stammzertifizierungsstelle angewendet (diese bestimmt selbst die eigene Zertifikatgültigkeit).
AlternatesignatureAlgorithmBetrifft nur Stammzertifizierungsstellen.
Ist der Wert auf "0" gesetzt, wird das PKCS#1 Padding Schema in Version 1.5 verwendet.
Ist der Wert auf "1" gesetzt, wird das PKCS#1 Padding Schema in Version 2.1 verwendet.
ForceUTF8Betrifft nur Stammzertifizierungsstellen.
Erzwingt die Kodierung des "Common Name" der Zertifizierungsstelle in UTF-8 (Andernfalls nur, wenn er Sonderzeichen beinhaltet).
LoadDefaultTemplatesBetrifft nur Active Directory-integrierte Zertifizierungsstellen (Enterprise CA).
Ist der Wert auf "1" gesetzt oder nicht definiert, wird automatisch ein Satz aus Standard-Zertifikatvorlagen auf der Zertifizierungsstelle veröffentlicht – darum sollte der Wert definiert und auf "0" gesetzt werden, um dies zu verhindern.

Siehe hierzu auch folgende Artikel:

Beispiel für typische Einstellungen einer Stammzertifizierungsstelle:

[Certsrv_Server]
RenewalKeyLength=4096
RenewalValidityPeriod=Years
RenewalValidityPeriodUnits=8
AlternateSignatureAlgorithm=0
ForceUTF8=1

Beispiel für typische Einstellungen einer ausstellenden Zertifizierungsstelle:

[Certsrv_Server]
RenewalKeyLength=4096
LoadDefaultTemplates=0
AlternateSignatureAlgorithm=0

Im letzten "offiziellen" Buch über die Microsoft Active Directory Certificate Services, "Microsoft Windows Server 2008 PKI- und Zertifikat-Sicherheit" von Brian Komar wird fälschlicherweise von DiscreteSignatureAlgorithm gesprochen, und die Werte waren exakt umgekehrt. Zur Drucklegung des Buches war dies auch korrekt, jedoch wurde die Direktive mit dem Übergang von der Betaversion von Windows Server 2008 zur finalen Version in "AlternateSignatureAlgorithm" umbenannt, inkl. umgekehrter Funktionsweise. Somit wurde PKCS#1 in Version 1.5 weiterhin als Standardeinstellung verwendet, wenn die Direktive nicht explizit konfiguriert wurde.

Speichern der Datei

Die Datei muss im Verzeichnis C:\Windows mit ANSI Kodierung abgespeichert werden, bevor die Zertifizierungsstellen-Rolle konfiguriert wird.

Die Bezeichnung "ANSI" entspricht im Windows-Ökosystem dem Zeichencode Windows-1252 (Latin-1, Westeuropäisch).

Altlasten und unübliche Einstellungen

Der Vollständigkeit halber nachfolgend noch einige Einstellungen, welche heutzutage eher keine Relevanz mehr in der Praxis haben.

CRLDistributionPoint und AuthorityInformationAccess

In dieser Sektion kann eine Erweiterung für Sperrlistenverteilungspunkte bzw. für den Zugriff auf Stelleninformationenim Zertifikatantrag eingetragen werden.

Die Sektion sollte nich mehr verwendet werden. Sektionen in der capolicy.inf werden (mit Ausnahme der CertSrv_Server Sektion) in die Zertifikatanforderung für die Zertifizierungsstelle geschrieben und von der übergeordneten Zertifizierungsstelle ohnehin überschrieben. Die Pfade werden also in der Konfiguration der übergeordneten Zertifizierungsstelle festgelegt. Möchte man die Sperrlistenverteilpunkte oder für den Zugriff auf Stelleninformationen für die Zertifizierungsstelle anpassen, macht man dies über die Registrierung der installierten Zertifizierungsstelle.

[CRLDistributionPoint]
URL=http://pki.adcslabor.de/CertData/MeineCrl.crl

[AuthorityInformationAccess]
URL=http://pki.adcslabor.de/CertData/MeinCaZertifikat.crt

Auch die "Empty=true" Direktive in diesen Sektionen ist seit Windows Server 2008 und neuer bei Stammzertifizierungsstellenzertifikaten nicht mehr erforderlich.

Siehe hierzu auch Artikel "Token für die CDP- und AIA- Konfiguration einer Zertifizierungsstelle".

Einstellungen, die auch über die Registrierung der Zertifizierungsstelle gesetzt werden können

Folgende Einstellungen können in der CertSrv_Server Sektion gesetzt werden. Sie sind optional, und identisch zum gleichnamigen Wert in der Zertifizierungsstellen-Registrierung. Somit ist es sinnvoll, diese auch dort im Nachgang einer Zertfizierungsstellen-Installation zu setzen.

Die "Unit" Werte werden im folgenden Format angegeben: "Minutes", "Hours", "Days", "Weeks", "Months", "Years".

ParameterBeschreibung
ClockSkewMinutesBeschreibt die Differenz (plus/minus) ausgestellter Zertifikate zur Systemzeit in Minuten, um eventuelle Zeitdifferenzen auszugleichen.
CRLPeriodBeschreibt die Einheiten für die Gültigkeit der Sperrlisten.
CRLPeriodUnitsBeschreibt den Zahlenwert für die zugehörige Einheit.
CRLOverlapPeriodBeschreibt die Einheiten für den Überlappungszeitraum der Sperrlisten.
CRLOverlapUnitsBeschreibt den Zahlenwert für die zugehörige Einheit.
CRLDeltaPeriodUnitsBeschreibt die Einheiten für die Gültigkeit der Delta-Sperrlisten.
CRLDeltaPeriodBeschreibt den Zahlenwert für die zugehörige Einheit.
CRLDeltaOverlapUnitsBeschreibt die Einheiten für den Überlappungszeitraum der Delta-Sperrlisten.
CRLDeltaOverlapPeriodBeschreibt den Zahlenwert für die zugehörige Einheit.

Unübliche sonstige Einstellungen

ParameterBeschreibung
EnableKeyCountingIst diese Option aktiviert (Wert auf "1" gesetzt), wird bei jeder Nutzung des privaten Schlüsels ein Zähler hochgezählt. Diese Funktion muss allerdings vom entsprechenden Key Storage provider aus unterstütz werden.

Weiterführende Links:

Externe Quellen