====== Szenario 3.1: Server-Zertifikat ausstellen ====== **Kategorie:** [[.:start|Zertifikate ausstellen]] \\ **Komplexität:** ⭐⭐⭐ (Mittel-Hoch) \\ **Voraussetzungen:** CSR vorhanden, Intermediate-CA \\ **Geschätzte Zeit:** 10-15 Minuten ---- ===== Beschreibung ===== Dieses Szenario beschreibt die Ausstellung eines **TLS-Serverzertifikats** durch eine Intermediate-CA. Das Zertifikat ermöglicht HTTPS-Verschlüsselung für Webserver, APIs und andere TLS-geschützte Dienste. **Was wird erstellt:** * X.509 v3 Server-Zertifikat * Signiert mit ML-DSA-65 (Post-Quantum) * Extensions für TLS-Server ---- ===== Workflow ===== flowchart LR CSR[CSR laden] --> VERIFY[CSR verifizieren] VERIFY --> EXT[Extensions setzen] EXT --> SERIAL[Serial generieren] SERIAL --> SIGN[Mit CA signieren] SIGN --> EXPORT[Als PEM exportieren] style SIGN fill:#e8f5e9 ---- ===== Code-Beispiel (C#) ===== using WvdS.Security.Cryptography.X509Certificates.Extensions.PQ; using var ctx = PqCryptoContext.Initialize(); // Intermediate-CA laden var caCert = ctx.LoadCertificate("intermediate-ca.crt.pem"); var caKey = ctx.LoadPrivateKey("intermediate-ca.key.pem", "CaPassword!"); // CSR laden und verifizieren var csr = ctx.LoadCertificateRequest(File.ReadAllText("server.csr.pem")); if (!csr.VerifySignature()) throw new CryptographicException("Ungültige CSR-Signatur"); // Server-Zertifikat ausstellen var serverCert = ctx.IssueCertificate( csr, issuerCert: caCert, issuerKey: caKey, serialNumber: ctx.GenerateSerialNumber(), validDays: 365, // 1 Jahr extensions: new ExtBuilder() // Basic Constraints: Kein CA .BasicConstraints(ca: false, critical: true) // Key Usage für TLS .KeyUsage(KeyUsageFlags.DigitalSignature | KeyUsageFlags.KeyEncipherment, critical: true) // Extended Key Usage: Server Auth .ExtendedKeyUsage(ExtKeyUsage.ServerAuth) // Subject Key Identifier .SubjectKeyIdentifier(csr.PublicKey) // Authority Key Identifier .AuthorityKeyIdentifier(caCert) // CRL Distribution Point .CrlDistributionPoint("http://crl.example.com/intermediate.crl") // OCSP Responder .AuthorityInfoAccess( ocspUrl: "http://ocsp.example.com", caIssuersUrl: "http://ca.example.com/intermediate.crt" ) .Build() ); // Speichern serverCert.ToPemFile("server.crt.pem"); // Zertifikatskette erstellen var chain = $"{serverCert.ToPem()}\n{caCert.ToPem()}"; File.WriteAllText("server-chain.pem", chain); Console.WriteLine("Server-Zertifikat ausgestellt:"); Console.WriteLine($" Subject: {serverCert.Subject}"); Console.WriteLine($" Issuer: {serverCert.Issuer}"); Console.WriteLine($" Serial: {serverCert.SerialNumber}"); Console.WriteLine($" Gültig bis: {serverCert.NotAfter:yyyy-MM-dd}"); ---- ===== Extensions für Server-Zertifikate ===== ^ Extension ^ Wert ^ Critical ^ Beschreibung ^ | Basic Constraints | CA=false | ✅ | Kein CA-Zertifikat | | Key Usage | digitalSignature, keyEncipherment | ✅ | TLS-Handshake | | Extended Key Usage | serverAuth | ❌ | Server-Authentifizierung | | Subject Key Identifier | Hash(PublicKey) | ❌ | Schlüssel-ID | | Authority Key Identifier | CA-SKI | ❌ | Issuer-Referenz | | Subject Alt Name | DNS-Namen | ❌ | Aus CSR übernommen | | CRL Distribution Points | URL | ❌ | Revocation-Prüfung | | Authority Info Access | OCSP, CA Issuers | ❌ | Validierungshilfen | ---- ===== Branchenspezifische Gültigkeiten ===== ^ Branche ^ Gültigkeit ^ Begründung ^ | **Standard IT** | 1 Jahr (365 Tage) | CA/Browser Forum Maximum | | **Energie/SCADA** | 3-5 Jahre | Lange Wartungszyklen | | **Healthcare** | 1-2 Jahre | Compliance-Anforderungen | | **Automotive** | 2-3 Jahre | Fahrzeug-Lebenszyklus | **Empfehlung:** Für öffentliche Websites max. 398 Tage (CA/B Forum). Für interne Dienste können längere Gültigkeiten sinnvoll sein. ---- ===== Ausgabe-Dateien ===== ==== server.crt.pem ==== -----BEGIN CERTIFICATE----- MIIHxjCCBiagAwIBAgIUP7J2kM9x... -----END CERTIFICATE----- ==== server-chain.pem ==== -----BEGIN CERTIFICATE----- (Server-Zertifikat) -----END CERTIFICATE----- -----BEGIN CERTIFICATE----- (Intermediate-CA) -----END CERTIFICATE----- ---- ===== Nginx Konfiguration ===== server { listen 443 ssl; server_name www.example.com; ssl_certificate /etc/nginx/ssl/server-chain.pem; ssl_certificate_key /etc/nginx/ssl/server.key.pem; ssl_protocols TLSv1.3; ssl_prefer_server_ciphers on; } ---- ===== Verwandte Szenarien ===== ^ Beziehung ^ Szenario ^ Beschreibung ^ | **Voraussetzung** | [[de:int:pqcrypt:szenarien:csr:csr_server|2.1 Server-CSR]] | CSR erstellen | | **Voraussetzung** | [[de:int:pqcrypt:szenarien:pki:intermediate_ca_erstellen|1.2 Intermediate-CA]] | Signierende CA | | **Nächster Schritt** | [[de:int:pqcrypt:szenarien:tls:server_setup|10.1 TLS-Server einrichten]] | Zertifikat deployen | | **Verwandt** | [[.:client_cert|3.2 Client-Zertifikat]] | Für mTLS | ---- << [[.:start|← Zertifikate-Übersicht]] | [[de:int:pqcrypt:szenarien:start|↑ Szenarien]] | [[.:client_cert|3.2 Client-Zertifikat →]] >> {{tag>szenario zertifikat server tls https x509}} ---- //Wolfgang van der Stille @ EMSR DATA d.o.o. - Post-Quantum Cryptography Professional//