Inhaltsverzeichnis
Szenario 2.1: Server-CSR erstellen
Kategorie: 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 |
| 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 | 3.1 Server-Zertifikat | CSR von CA signieren lassen |
| Alternativ | 2.3 Multi-SAN CSR | Mehrere Domains |
| Verwandt | 2.2 Client-CSR | Für Client-Authentifizierung |
« ← CSR-Übersicht | ↑ Szenarien | 2.2 Client-CSR → »
Wolfgang van der Stille @ EMSR DATA d.o.o. - Post-Quantum Cryptography Professional
Zuletzt geändert: den 29.01.2026 um 15:12