====== Runbook: Zertifikat ausstellen ======
**Dauer:** ~10 Minuten \\
**Rolle:** PKI-Operator \\
**Voraussetzung:** Genehmigter CSR
----
===== Workflow =====
flowchart TD
A[CSR empfangen] --> B{CSR validieren}
B -->|Ungültig| C[Ablehnen + Ticket]
B -->|Gültig| D{Genehmigung?}
D -->|Nein| E[Genehmigung anfordern]
D -->|Ja| F[Zertifikat signieren]
F --> G{Hybrid-Modus?}
G -->|Ja| H[PQ-Extension hinzufügen]
G -->|Nein| I[Klassisch signieren]
H --> J[Ausliefern]
I --> J
J --> K[Audit Log]
style B fill:#fff3e0
style F fill:#e8f5e9
style H fill:#e3f2fd
----
===== Schritt 1: CSR empfangen und validieren =====
**Checkliste vor Signierung:**
| # | Prüfpunkt | Befehl | Erwartet |
|---|-----------|--------|----------|
| 1 | CSR-Format gültig | ''openssl req -in request.csr -verify -noout'' | ''verify OK'' |
| 2 | Schlüssellänge | ''openssl req -in request.csr -text \| grep "Public-Key"'' | ≥2048 Bit (RSA), ≥256 Bit (EC) |
| 3 | Subject korrekt | ''openssl req -in request.csr -subject -noout'' | Gemäß Antrag |
| 4 | SANs vollständig | ''openssl req -in request.csr -text \| grep -A1 "Subject Alternative"'' | Alle Hostnamen |
# Komplette CSR-Prüfung
openssl req -in request.csr -text -noout -verify
----
===== Schritt 2: Genehmigung prüfen =====
| Zertifikatstyp | Genehmigung durch | Dokumentation |
|----------------|-------------------|---------------|
| Server (intern) | Automatisch / Ticket | Ticket-Nr. |
| Server (extern) | IT-Security | E-Mail + Ticket |
| Client | Abteilungsleiter | Formular |
| Code-Signing | CISO | Schriftlich |
----
===== Schritt 3: Zertifikat signieren =====
==== Klassischer Modus ====
# Server-Zertifikat signieren (1 Jahr)
openssl ca -config openssl.cnf \
-extensions server_cert \
-in request.csr \
-out certificate.pem \
-days 365 \
-notext
# Seriennummer notieren
openssl x509 -in certificate.pem -serial -noout
==== Hybrid-Modus (PQ) ====
// C# mit WvdS.System.Security.Cryptography
using var intermediate = new X509Certificate2("intermediate.pfx", "password");
var csr = CertificateRequest.LoadSigningRequest(
File.ReadAllBytes("request.csr"),
HashAlgorithmName.SHA256);
var cert = csr.Create(
intermediate,
DateTimeOffset.UtcNow,
DateTimeOffset.UtcNow.AddDays(365),
Guid.NewGuid().ToByteArray(),
CryptoMode.Hybrid); // PQ-Extension
File.WriteAllText("certificate.pem", cert.ExportCertificatePem());
----
===== Schritt 4: Ausliefern =====
| Format | Verwendung | Befehl |
|--------|------------|--------|
| PEM | Linux, Apache | ''cp certificate.pem /output/'' |
| PFX | Windows, IIS | ''openssl pkcs12 -export -in certificate.pem -inkey private.key -out certificate.pfx'' |
| DER | Java | ''openssl x509 -in certificate.pem -outform DER -out certificate.der'' |
# Mit Kette ausliefern
cat certificate.pem intermediate.pem > fullchain.pem
----
===== Schritt 5: Dokumentation =====
**Pflichtfelder im Ticket/Log:**
| Feld | Beispiel |
|------|----------|
| Seriennummer | ''01:23:45:67:89:AB:CD:EF'' |
| Subject | ''CN=server.example.com'' |
| Gültig bis | ''2025-12-15'' |
| Ausgestellt von | ''Operator-Name'' |
| Ticket-Nr. | ''INC-2024-12345'' |
| Modus | ''Hybrid / Classic'' |
----
===== Fehlerbehebung =====
| Problem | Ursache | Lösung |
|---------|---------|--------|
| ''unable to load CSR'' | Falsches Format | ''openssl req -inform DER -in request.der -out request.pem'' |
| ''signature verify failed'' | CSR manipuliert | CSR neu anfordern |
| ''wrong issuer'' | Falsche CA | CA-Zertifikat prüfen |
| ''certificate request failed'' | Konfigurationsfehler | ''openssl.cnf'' prüfen |
----
===== Verwandte Runbooks =====
* [[.:zertifikat-erneuern|Zertifikat erneuern]] – Für ablaufende Zertifikate
* [[.:zertifikat-widerrufen|Zertifikat widerrufen]] – Bei Kompromittierung
* [[de:int:pqcrypt:szenarien:kurzreferenz:csr|CSR Kurzreferenz]] – Code-Beispiele
----
<< [[.:start|← Tagesgeschäft]] | [[.:zertifikat-erneuern|→ Zertifikat erneuern]] >>
----
//Wolfgang van der Stille @ EMSR DATA d.o.o. - Post-Quantum Cryptography Professional//
{{tag>runbook zertifikat ausstellen operator}}