====== Szenario 2.1: Server-CSR erstellen ====== **Kategorie:** [[.:start|Zertifikatsanträge (CSR)]] \\ **Komplexität:** ⭐⭐ (Mittel) \\ **Voraussetzungen:** Schlüsselpaar vorhanden \\ **Geschätzte Zeit:** 5-10 Minuten ---- ===== Beschreibung ===== Dieses Szenario beschreibt die Erstellung eines **Certificate Signing Request (CSR)** für ein TLS-Serverzertifikat. Der CSR enthält alle Informationen, die eine CA benötigt, um ein Serverzertifikat auszustellen. **Was wird erstellt:** * ML-DSA-65 Schlüsselpaar (oder Hybrid) * CSR mit Server-DN und Extensions * Subject Alternative Names (SAN) für DNS-Namen **Anwendungsfälle:** * HTTPS-Webserver * API-Endpoints * Microservices mit TLS ---- ===== Workflow ===== flowchart LR KEY[Schlüsselpaar generieren] --> DN[DN erstellen] DN --> EXT[Extensions setzen] EXT --> CSR[CSR erstellen] CSR --> SIGN[CSR signieren] SIGN --> EXPORT[Als PEM exportieren] style CSR fill:#e8f5e9 ---- ===== Beteiligte Funktionen ===== ^ Schritt ^ FFI-Funktion ^ Beschreibung ^ | 1 | ''wvds_sec_crypto_x509_keypair_generate_mldsa(65)'' | Schlüsselpaar generieren | | 2 | ''wvds_sec_crypto_x509_dn_create()'' | DN-Handle erstellen | | 3 | ''wvds_sec_crypto_x509_dn_add_component()'' | CN, O, C hinzufügen | | 4 | ''wvds_sec_crypto_x509_ext_set_san_dns()'' | DNS-Namen hinzufügen | | 5 | ''wvds_sec_crypto_x509_ext_set_key_usage()'' | digitalSignature, keyEncipherment | | 6 | ''wvds_sec_crypto_x509_ext_set_eku()'' | serverAuth | | 7 | ''wvds_sec_crypto_x509_csr_create()'' | CSR erstellen | | 8 | ''wvds_sec_crypto_x509_csr_sign()'' | CSR mit Private Key signieren | | 9 | ''wvds_sec_crypto_x509_csr_to_pem()'' | Als PEM exportieren | ---- ===== Code-Beispiel (C#) ===== using WvdS.Security.Cryptography.X509Certificates.Extensions.PQ; // 1. Kontext initialisieren using var ctx = PqCryptoContext.Initialize(); // 2. Schlüsselpaar für Server generieren using var serverKey = ctx.GenerateKeyPair(PqAlgorithm.MlDsa65); // 3. Distinguished Name var dn = new DnBuilder() .AddCN("www.example.com") .AddO("Example GmbH") .AddOU("IT-Abteilung") .AddC("DE") .AddL("München") .Build(); // 4. Extensions für Server-Zertifikat var extensions = new ExtBuilder() .SubjectAlternativeName(new[] { "www.example.com", "example.com", "api.example.com" }) .KeyUsage(KeyUsageFlags.DigitalSignature | KeyUsageFlags.KeyEncipherment) .ExtendedKeyUsage(ExtKeyUsage.ServerAuth) .Build(); // 5. CSR erstellen und signieren var csr = ctx.CreateCertificateRequest(serverKey, dn, extensions); // 6. Als PEM speichern File.WriteAllText("server.csr.pem", csr.ToPem()); File.WriteAllText("server.key.pem", serverKey.ToEncryptedPem("SecurePassword123!")); Console.WriteLine("CSR erstellt: server.csr.pem"); Console.WriteLine($"Subject: {csr.Subject}"); Console.WriteLine($"SANs: {string.Join(", ", csr.SubjectAlternativeNames)}"); ---- ===== Parameter ===== ==== Subject Alternative Names ==== ^ Typ ^ Präfix ^ Beispiel ^ | DNS-Name | dns: | www.example.com | | IP-Adresse | ip: | 192.168.1.100 | | E-Mail | email: | admin@example.com | | URI | uri: | https://example.com | ==== Key Usage für Server ==== ^ Flag ^ Beschreibung ^ Pflicht ^ | digitalSignature | TLS-Handshake signieren | ✅ | | keyEncipherment | RSA Key Exchange (nicht für ECDHE) | Optional | | keyAgreement | ECDH Key Exchange | Optional | ---- ===== Ausgabe-Dateien ===== ==== server.csr.pem ==== -----BEGIN CERTIFICATE REQUEST----- MIICxjCCAi0CAQAwgYExCz... (Base64 DER) -----END CERTIFICATE REQUEST----- ^ Feld ^ Wert ^ | Version | 1 (0x00) | | Subject | CN=www.example.com, O=Example GmbH, C=DE | | Public Key | ML-DSA-65 (~1.952 Bytes) | | Attributes | Extension Request (SAN, Key Usage, EKU) | | Signature | ML-DSA-65 (Self-Proof-of-Possession) | ---- ===== Häufige Fehler ===== ^ Problem ^ Ursache ^ Lösung ^ | CSR wird abgelehnt | CN nicht in SAN | CN immer auch als SAN hinzufügen | | CA akzeptiert CSR nicht | Falsches Format | PEM-Format prüfen | | Key Usage fehlt | Extensions nicht gesetzt | ExtBuilder verwenden | ---- ===== Verwandte Szenarien ===== ^ Beziehung ^ Szenario ^ Beschreibung ^ | **Nächster Schritt** | [[de:int:pqcrypt:szenarien:zertifikate:server_cert|3.1 Server-Zertifikat]] | CSR von CA signieren lassen | | **Alternativ** | [[.:csr_multi_san|2.3 Multi-SAN CSR]] | Mehrere Domains | | **Verwandt** | [[.:csr_client|2.2 Client-CSR]] | Für Client-Authentifizierung | ---- << [[.:start|← CSR-Übersicht]] | [[de:int:pqcrypt:szenarien:start|↑ Szenarien]] | [[.:csr_client|2.2 Client-CSR →]] >> {{tag>szenario csr server tls san ml-dsa}} ---- //Wolfgang van der Stille @ EMSR DATA d.o.o. - Post-Quantum Cryptography Professional//