====== Szenario 2.2: Client-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 Client-Zertifikat. Client-Zertifikate werden für mTLS-Authentifizierung, Smart Card Login oder API-Zugriff verwendet.
**Was wird erstellt:**
* ML-DSA-65 Schlüsselpaar
* CSR mit Client-DN und Extensions
* Extended Key Usage: clientAuth
**Anwendungsfälle:**
* mTLS API-Authentifizierung
* VPN-Zugang
* Smart Card / PIV
* Service-to-Service Kommunikation
----
===== Unterschied Server vs. Client CSR =====
^ Aspekt ^ Server-CSR ^ Client-CSR ^
| Extended Key Usage | serverAuth | clientAuth |
| Subject | DNS-Name (CN) | Benutzer/Service-Name |
| SAN | DNS-Namen, IPs | E-Mail, UPN |
| Key Usage | digitalSignature, keyEncipherment | digitalSignature |
----
===== Code-Beispiel (C#) =====
using WvdS.Security.Cryptography.X509Certificates.Extensions.PQ;
using var ctx = PqCryptoContext.Initialize();
// Schlüsselpaar für Client
using var clientKey = ctx.GenerateKeyPair(PqAlgorithm.MlDsa65);
// DN für Benutzer oder Service
var dn = new DnBuilder()
.AddCN("Max Mustermann") // oder Service-Name
.AddO("Example GmbH")
.AddOU("Entwicklung")
.AddC("DE")
.AddEmail("max.mustermann@example.com")
.Build();
// Extensions für Client-Zertifikat
var extensions = new ExtBuilder()
.SubjectAlternativeName(new[] {
"email:max.mustermann@example.com",
"upn:max.mustermann@example.local" // Windows UPN
})
.KeyUsage(KeyUsageFlags.DigitalSignature)
.ExtendedKeyUsage(ExtKeyUsage.ClientAuth)
.Build();
// CSR erstellen
var csr = ctx.CreateCertificateRequest(clientKey, dn, extensions);
// Speichern
File.WriteAllText("client.csr.pem", csr.ToPem());
File.WriteAllText("client.key.pem", clientKey.ToEncryptedPem("ClientPassword!"));
Console.WriteLine("Client-CSR erstellt");
Console.WriteLine($"Subject: {csr.Subject}");
----
===== Service-Account CSR =====
Für Service-to-Service Kommunikation:
var dn = new DnBuilder()
.AddCN("payment-service")
.AddO("Example GmbH")
.AddOU("Microservices")
.Build();
var extensions = new ExtBuilder()
.SubjectAlternativeName(new[] {
"dns:payment-service.internal",
"dns:payment-service.prod.svc.cluster.local" // Kubernetes
})
.KeyUsage(KeyUsageFlags.DigitalSignature)
.ExtendedKeyUsage(ExtKeyUsage.ClientAuth)
.Build();
----
===== Parameter =====
==== Extended Key Usage für Clients ====
^ OID ^ Name ^ Verwendung ^
| 1.3.6.1.5.5.7.3.2 | clientAuth | mTLS Client |
| 1.3.6.1.4.1.311.20.2.2 | smartcardLogon | Windows Smart Card |
| 1.3.6.1.5.5.7.3.4 | emailProtection | S/MIME (optional) |
----
===== Verwandte Szenarien =====
^ Beziehung ^ Szenario ^ Beschreibung ^
| **Nächster Schritt** | [[de:int:pqcrypt:szenarien:zertifikate:client_cert|3.2 Client-Zertifikat]] | CSR von CA signieren |
| **Verwandt** | [[de:int:pqcrypt:szenarien:authentifizierung:mtls_client_auth|9.1 mTLS Client-Auth]] | Zertifikat verwenden |
| **Alternativ** | [[.:csr_server|2.1 Server-CSR]] | Für Server |
----
<< [[.:csr_server|← 2.1 Server-CSR]] | [[.:start|↑ CSR-Übersicht]] | [[.:csr_multi_san|2.3 Multi-SAN CSR →]] >>
{{tag>szenario csr client mtls authentifizierung}}
----
//Wolfgang van der Stille @ EMSR DATA d.o.o. - Post-Quantum Cryptography Professional//