====== Scenario 2.1: Creare CSR server ====== **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 server TLS. Il CSR contiene tutte le informazioni necessarie a una CA per emettere un certificato server. **Cosa viene creato:** * Coppia di chiavi ML-DSA-65 (o Hybrid) * CSR con DN server e Extensions * Subject Alternative Names (SAN) per nomi DNS **Casi d'uso:** * Webserver HTTPS * Endpoint API * Microservizi con TLS ---- ===== Workflow ===== flowchart LR KEY[Generare coppia chiavi] --> DN[Creare DN] DN --> EXT[Impostare Extensions] EXT --> CSR[Creare CSR] CSR --> SIGN[Firmare CSR] SIGN --> EXPORT[Esportare come PEM] style CSR fill:#e8f5e9 ---- ===== Funzioni coinvolte ===== ^ Passo ^ Funzione FFI ^ Descrizione ^ | 1 | ''wvds_sec_crypto_x509_keypair_generate_mldsa(65)'' | Generare coppia di chiavi | | 2 | ''wvds_sec_crypto_x509_dn_create()'' | Creare handle DN | | 3 | ''wvds_sec_crypto_x509_dn_add_component()'' | Aggiungere CN, O, C | | 4 | ''wvds_sec_crypto_x509_ext_set_san_dns()'' | Aggiungere nomi DNS | | 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()'' | Creare CSR | | 8 | ''wvds_sec_crypto_x509_csr_sign()'' | Firmare CSR con chiave privata | | 9 | ''wvds_sec_crypto_x509_csr_to_pem()'' | Esportare come PEM | ---- ===== Esempio di codice (C#) ===== using WvdS.Security.Cryptography.X509Certificates.Extensions.PQ; // 1. Inizializzare contesto using var ctx = PqCryptoContext.Initialize(); // 2. Generare coppia di chiavi per server using var serverKey = ctx.GenerateKeyPair(PqAlgorithm.MlDsa65); // 3. Distinguished Name var dn = new DnBuilder() .AddCN("www.example.com") .AddO("Example SRL") .AddOU("Reparto IT") .AddC("IT") .AddL("Milano") .Build(); // 4. Extensions per certificato server var extensions = new ExtBuilder() .SubjectAlternativeName(new[] { "www.example.com", "example.com", "api.example.com" }) .KeyUsage(KeyUsageFlags.DigitalSignature | KeyUsageFlags.KeyEncipherment) .ExtendedKeyUsage(ExtKeyUsage.ServerAuth) .Build(); // 5. Creare e firmare CSR var csr = ctx.CreateCertificateRequest(serverKey, dn, extensions); // 6. Salvare come PEM File.WriteAllText("server.csr.pem", csr.ToPem()); File.WriteAllText("server.key.pem", serverKey.ToEncryptedPem("SecurePassword123!")); Console.WriteLine("CSR creato: server.csr.pem"); Console.WriteLine($"Subject: {csr.Subject}"); Console.WriteLine($"SANs: {string.Join(", ", csr.SubjectAlternativeNames)}"); ---- ===== Parametri ===== ==== Subject Alternative Names ==== ^ Tipo ^ Prefisso ^ Esempio ^ | Nome DNS | dns: | www.example.com | | Indirizzo IP | ip: | 192.168.1.100 | | E-Mail | email: | admin@example.com | | URI | uri: | https://example.com | ==== Key Usage per server ==== ^ Flag ^ Descrizione ^ Obbligatorio ^ | digitalSignature | Firmare TLS-Handshake | ✅ | | keyEncipherment | RSA Key Exchange (non per ECDHE) | Opzionale | | keyAgreement | ECDH Key Exchange | Opzionale | ---- ===== File di output ===== ==== server.csr.pem ==== -----BEGIN CERTIFICATE REQUEST----- MIICxjCCAi0CAQAwgYExCz... (Base64 DER) -----END CERTIFICATE REQUEST----- ^ Campo ^ Valore ^ | Version | 1 (0x00) | | Subject | CN=www.example.com, O=Example SRL, C=IT | | Public Key | ML-DSA-65 (~1.952 Bytes) | | Attributes | Extension Request (SAN, Key Usage, EKU) | | Signature | ML-DSA-65 (Self-Proof-of-Possession) | ---- ===== Errori comuni ===== ^ Problema ^ Causa ^ Soluzione ^ | CSR rifiutato | CN non in SAN | Aggiungere sempre CN anche come SAN | | CA non accetta CSR | Formato errato | Verificare formato PEM | | Key Usage mancante | Extensions non impostate | Utilizzare ExtBuilder | ---- ===== Scenari correlati ===== ^ Relazione ^ Scenario ^ Descrizione ^ | **Passo successivo** | [[it:int:pqcrypt:szenarien:zertifikate:server_cert|3.1 Certificato server]] | Far firmare CSR dalla CA | | **Alternativo** | [[.:csr_multi_san|2.3 CSR Multi-SAN]] | Piu domini | | **Correlato** | [[.:csr_client|2.2 CSR client]] | Per autenticazione client | ---- << [[.:start|← Panoramica CSR]] | [[it:int:pqcrypt:szenarien:start|↑ Scenari]] | [[.:csr_client|2.2 CSR client →]] >> {{tag>scenario csr server tls san ml-dsa}} ---- //Wolfgang van der Stille @ EMSR DATA d.o.o. - Post-Quantum Cryptography Professional//