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