Die capolicy.inf beinhaltet grundlegende Einstellungen, die vor der Installation einer Zertifizierungsstelle festgelegt werden können oder sollten. Vereinfacht ausgedrückt kann man sagen, dass keine Zertifizierungsstelle ohne sie installiert werden sollte.
Erstellen einer capolicy.inf
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 Datei wird nicht automatisch erstellt. Entsprechend muss sie vor der Installation einer Zertifizierungsstelle erstellt und im Falle einer Migration oder Wiederherstellung vom Quellsystem übernommen werden.
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:
- Entfernen der ADCS-spezifischen Erweiterungen aus Zertifikaten
- Grundlagen: Namenseinschränkungen (Name Constraints)
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.
OID | Beschreibung |
---|---|
2.5.29.32.0 | All Issuance Policies (AnyPolicy) |
1.3.6.1.4.1.311.21.32 | TPM Key Attestattion: User Credentials: (Low Assurance) |
1.3.6.1.4.1.311.21.31 | TPM Key Attestattion: Endorsement Certificate: (Medium Assurance) |
1.3.6.1.4.1.311.21.30 | TPM Key Attestattion: Endorsement Key: (High Assurance) |
EnhancedKeyUsageExtension
In der "EnhancedKeyUsageExtension" Sektion kann die "Extended 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:
- Grundlagen: Einschränken der erweiterten Schlüsselverwendung (Extended Key Usage, EKU) in Zertifizierungsstellen-Zertifikaten
- Domänencontroller überprüfen erweiterte Schlüsselverwendung (Extended Key Usage) bei Smartcard Anmeldung nicht
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:
OID | Beschreibung |
---|---|
1.3.6.1.4.1.311.20.2.1 | Certificate Request Agent |
1.3.6.1.5.5.7.3.2 | Client Authentication |
1.3.6.1.5.5.7.3.3 | Code Signing |
1.3.6.1.4.1.311.10.3.13 | Lifetime Signing |
1.3.6.1.4.1.311.10.3.12 | Document Signing |
1.3.6.1.4.1.311.80.1 | Document Encryption |
1.3.6.1.4.1.311.10.3.4 | Encrypting file system |
1.3.6.1.4.1.311.10.3.4.1 | File Recovery |
1.3.6.1.5.5.7.3.5 | IP Security End System |
1.3.6.1.5.5.8.2.2 | IP Security IKE Intermediate |
1.3.6.1.5.5.7.3.6 | IP Security Tunnel Endpoint |
1.3.6.1.5.5.7.3.7 | IP Security User |
1.3.6.1.4.1.311.10.3.11 | Key Recovery |
1.3.6.1.5.2.3.5 | KDC Authentication |
1.3.6.1.4.1.311.10.3.1 | Microsoft Trust List Signing |
1.3.6.1.4.1.311.10.3.10 | Qualified Subordination |
1.3.6.1.4.1.311.10.3.9 | Root List Signer |
1.3.6.1.5.5.7.3.4 | Secure E-mail |
1.3.6.1.5.5.7.3.1 | Server Authentication |
1.3.6.1.4.1.311.20.2.2 | Smartcard Logon |
1.3.6.1.5.5.7.3.8 | Time Stamping gemäß RFC 3161 |
1.3.6.1.5.5.7.3.9 | OCSP Signing |
1.3.6.1.4.1.311.54.1.2 | Remote Desktop Authentication |
1.3.6.1.4.1.311.21.5 | Private Key Archival |
2.16.840.1.113741.1.2.3 | Intel 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.
Parameter | Beschreibung |
---|---|
RenewalKeyLength | Wird nur bei Erneuerung des Zertifizierungsstellenzertifikats mit einem neuen Schlüsselpaar angewendet. Bezeichnet die in diesem Fall zu verwendende Schlüsselgröße. |
RenewalValidityPeriod | Betrifft nur Stammzertifizierungsstellen. Wird nur bei Erneuerung des Zertifizierungsstellenzertifikats einer Stammzertifizierungsstelle angewendet (diese bestimmt selbst die eigene Zertifikatgültigkeit). |
RenewalValidityPeriodUnits | Betrifft nur Stammzertifizierungsstellen. Wird nur bei Erneuerung des Zertifizierungsstellenzertifikats einer Stammzertifizierungsstelle angewendet (diese bestimmt selbst die eigene Zertifikatgültigkeit). |
AlternatesignatureAlgorithm | Betrifft 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. |
ForceUTF8 | Betrifft nur Stammzertifizierungsstellen. Erzwingt die Kodierung des "Common Name" der Zertifizierungsstelle in UTF-8 (Andernfalls nur, wenn er Sonderzeichen beinhaltet). Kann zu Kompatibilitätsproblemen führen und sollte daher nach Möglichkeit nicht verwendet werden. |
LoadDefaultTemplates | Betrifft 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:
- PKCS#1 Version 2.1 für eine Stammzertifizierungsstelle (Root CA) einsetzen (eigenes und ausgestellte Zertifikate)
- Beschreibung der notwendigen Konfigurationseinstellungen für das "Common PKI" Zertifikatprofil
- (Neu-) Installieren der Microsoft Standard Zertifikatvorlagen
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".
Parameter | Beschreibung |
---|---|
ClockSkewMinutes | Beschreibt die Differenz (plus/minus) ausgestellter Zertifikate zur Systemzeit in Minuten, um eventuelle Zeitdifferenzen auszugleichen. |
CRLPeriod | Beschreibt die Einheiten für die Gültigkeit der Sperrlisten. |
CRLPeriodUnits | Beschreibt den Zahlenwert für die zugehörige Einheit. |
CRLOverlapPeriod | Beschreibt die Einheiten für den Überlappungszeitraum der Sperrlisten. |
CRLOverlapUnits | Beschreibt den Zahlenwert für die zugehörige Einheit. |
CRLDeltaPeriodUnits | Beschreibt die Einheiten für die Gültigkeit der Delta-Sperrlisten. |
CRLDeltaPeriod | Beschreibt den Zahlenwert für die zugehörige Einheit. |
CRLDeltaOverlapUnits | Beschreibt die Einheiten für den Überlappungszeitraum der Delta-Sperrlisten. |
CRLDeltaOverlapPeriod | Beschreibt den Zahlenwert für die zugehörige Einheit. |
Unübliche sonstige Einstellungen
Parameter | Beschreibung |
---|---|
EnableKeyCounting | Ist 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:
- Umlaute in Zertifizierungsstellen-Zertifikaten
- Grundlagen: Einschränken der erweiterten Schlüsselverwendung (Extended Key Usage, EKU) in Zertifizierungsstellen-Zertifikaten
- Häufig verwendete erweiterte Schlüsselverwendungen (Extended Key Usages) und Ausstellungsrichtlinien (Issuance Policies)
- Grundlagen: Schlüsselalgorithmen, Signaturalgorithmen und Signaturhashalgorithmen
- PKCS#1 Version 2.1 für eine Stammzertifizierungsstelle (Root CA) einsetzen (eigenes und ausgestellte Zertifikate)
- Beschreibung der notwendigen Konfigurationseinstellungen für das "Common PKI" Zertifikatprofil
- Verwenden von Name Constraints, um einer Zertifizierungsstelle nur die Ausstellung von Zertifikaten für bestimmte Domänennamen zu erlauben
- (Neu-) Installieren der Microsoft Standard Zertifikatvorlagen
- Token für die CDP- und AIA- Konfiguration einer Zertifizierungsstelle
- Zeichenkodierung im Subject Distinguished Name von Zertifikatanforderungen und ausgestellten Zertifikaten
Externe Quellen
- Prepare the CAPolicy.inf File (Microsoft)
- Windows Server 2008 R2 CAPolicy.inf Syntax (Microsoft, Archivlink)
- Baseline Requirements for the Issuance and Management of Publicly-Trusted Certificates (CA/Browser Forum)
- Drei Jahrzehnte Unicode (Golem Media GmbH)
7 Gedanken zu „Grundlagen: Konfigurationsdatei für die Zertifizierungsstelle (capolicy.inf)“
Kommentare sind geschlossen.