====== 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}}