====== Scenario 2.2: Creare CSR client ======
**Categoria:** [[.:start|Richieste di certificato (CSR)]] \\
**Complessita:** ⭐⭐ (Media) \\
**Prerequisiti:** Coppia di chiavi disponibile \\
**Tempo stimato:** 5-10 minuti
----
===== Descrizione =====
Questo scenario descrive la creazione di un **Certificate Signing Request (CSR)** per un certificato client. I certificati client vengono utilizzati per l'autenticazione mTLS, Smart Card Login o accesso API.
**Cosa viene creato:**
* Coppia di chiavi ML-DSA-65
* CSR con DN client e Extensions
* Extended Key Usage: clientAuth
**Casi d'uso:**
* Autenticazione API mTLS
* Accesso VPN
* Smart Card / PIV
* Comunicazione Service-to-Service
----
===== Differenza Server vs. Client CSR =====
^ Aspetto ^ CSR server ^ CSR client ^
| Extended Key Usage | serverAuth | clientAuth |
| Subject | Nome DNS (CN) | Nome utente/servizio |
| SAN | Nomi DNS, IP | E-Mail, UPN |
| Key Usage | digitalSignature, keyEncipherment | digitalSignature |
----
===== Esempio di codice (C#) =====
using WvdS.Security.Cryptography.X509Certificates.Extensions.PQ;
using var ctx = PqCryptoContext.Initialize();
// Coppia di chiavi per client
using var clientKey = ctx.GenerateKeyPair(PqAlgorithm.MlDsa65);
// DN per utente o servizio
var dn = new DnBuilder()
.AddCN("Mario Rossi") // o nome servizio
.AddO("Example SRL")
.AddOU("Sviluppo")
.AddC("IT")
.AddEmail("mario.rossi@example.com")
.Build();
// Extensions per certificato client
var extensions = new ExtBuilder()
.SubjectAlternativeName(new[] {
"email:mario.rossi@example.com",
"upn:mario.rossi@example.local" // Windows UPN
})
.KeyUsage(KeyUsageFlags.DigitalSignature)
.ExtendedKeyUsage(ExtKeyUsage.ClientAuth)
.Build();
// Creare CSR
var csr = ctx.CreateCertificateRequest(clientKey, dn, extensions);
// Salvare
File.WriteAllText("client.csr.pem", csr.ToPem());
File.WriteAllText("client.key.pem", clientKey.ToEncryptedPem("ClientPassword!"));
Console.WriteLine("CSR client creato");
Console.WriteLine($"Subject: {csr.Subject}");
----
===== CSR Service-Account =====
Per comunicazione Service-to-Service:
var dn = new DnBuilder()
.AddCN("payment-service")
.AddO("Example SRL")
.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();
----
===== Parametri =====
==== Extended Key Usage per client ====
^ OID ^ Nome ^ Utilizzo ^
| 1.3.6.1.5.5.7.3.2 | clientAuth | Client mTLS |
| 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 (opzionale) |
----
===== Scenari correlati =====
^ Relazione ^ Scenario ^ Descrizione ^
| **Passo successivo** | [[it:int:pqcrypt:szenarien:zertifikate:client_cert|3.2 Certificato client]] | Firmare CSR dalla CA |
| **Correlato** | [[it:int:pqcrypt:szenarien:authentifizierung:mtls_client_auth|9.1 mTLS Client-Auth]] | Utilizzare certificato |
| **Alternativo** | [[.:csr_server|2.1 CSR server]] | Per server |
----
<< [[.:csr_server|← 2.1 CSR server]] | [[.:start|↑ Panoramica CSR]] | [[.:csr_multi_san|2.3 CSR Multi-SAN →]] >>
{{tag>scenario csr client mtls autenticazione}}
----
//Wolfgang van der Stille @ EMSR DATA d.o.o. - Post-Quantum Cryptography Professional//