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