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