====== Scenarij 2.1: Kreiranje serverskog CSR ====== **Kategorija:** [[.:start|Zahtjevi za certifikat (CSR)]] \\ **Složenost:** ⭐⭐ (Srednja) \\ **Preduvjeti:** Par ključeva dostupan \\ **Procijenjeno vrijeme:** 5-10 minuta ---- ===== Opis ===== Ovaj scenarij opisuje kreiranje **Certificate Signing Request (CSR)** za TLS serverski certifikat. CSR sadrži sve informacije koje CA treba za izdavanje serverskog certifikata. **Što se kreira:** * ML-DSA-65 par ključeva (ili hibridni) * CSR sa serverskim DN i ekstenzijama * Subject Alternative Names (SAN) za DNS imena **Slučajevi uporabe:** * HTTPS web server * API endpointi * Mikroservisi s TLS-om ---- ===== Tijek rada ===== flowchart LR KEY[Generiranje para ključeva] --> DN[Kreiranje DN] DN --> EXT[Postavljanje ekstenzija] EXT --> CSR[Kreiranje CSR] CSR --> SIGN[Potpisivanje CSR] SIGN --> EXPORT[Izvoz kao PEM] style CSR fill:#e8f5e9 ---- ===== Uključene funkcije ===== ^ Korak ^ FFI funkcija ^ Opis ^ | 1 | ''wvds_sec_crypto_x509_keypair_generate_mldsa(65)'' | Generiranje para ključeva | | 2 | ''wvds_sec_crypto_x509_dn_create()'' | Kreiranje DN handle | | 3 | ''wvds_sec_crypto_x509_dn_add_component()'' | Dodavanje CN, O, C | | 4 | ''wvds_sec_crypto_x509_ext_set_san_dns()'' | Dodavanje DNS imena | | 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()'' | Kreiranje CSR | | 8 | ''wvds_sec_crypto_x509_csr_sign()'' | Potpisivanje CSR privatnim ključem | | 9 | ''wvds_sec_crypto_x509_csr_to_pem()'' | Izvoz kao PEM | ---- ===== Primjer koda (C#) ===== using WvdS.Security.Cryptography.X509Certificates.Extensions.PQ; // 1. Inicijalizacija konteksta using var ctx = PqCryptoContext.Initialize(); // 2. Generiranje para ključeva za server using var serverKey = ctx.GenerateKeyPair(PqAlgorithm.MlDsa65); // 3. Distinguished Name var dn = new DnBuilder() .AddCN("www.example.com") .AddO("Example d.o.o.") .AddOU("IT odjel") .AddC("HR") .AddL("Zagreb") .Build(); // 4. Ekstenzije za serverski certifikat var extensions = new ExtBuilder() .SubjectAlternativeName(new[] { "www.example.com", "example.com", "api.example.com" }) .KeyUsage(KeyUsageFlags.DigitalSignature | KeyUsageFlags.KeyEncipherment) .ExtendedKeyUsage(ExtKeyUsage.ServerAuth) .Build(); // 5. Kreiranje i potpisivanje CSR var csr = ctx.CreateCertificateRequest(serverKey, dn, extensions); // 6. Spremanje kao PEM File.WriteAllText("server.csr.pem", csr.ToPem()); File.WriteAllText("server.key.pem", serverKey.ToEncryptedPem("SecurePassword123!")); Console.WriteLine("CSR kreiran: server.csr.pem"); Console.WriteLine($"Subject: {csr.Subject}"); Console.WriteLine($"SANs: {string.Join(", ", csr.SubjectAlternativeNames)}"); ---- ===== Parametri ===== ==== Subject Alternative Names ==== ^ Tip ^ Prefiks ^ Primjer ^ | DNS ime | dns: | www.example.com | | IP adresa | ip: | 192.168.1.100 | | E-mail | email: | admin@example.com | | URI | uri: | https://example.com | ==== Key Usage za server ==== ^ Zastavica ^ Opis ^ Obavezno ^ | digitalSignature | Potpisivanje TLS handshake | ✅ | | keyEncipherment | RSA Key Exchange (ne za ECDHE) | Opcionalno | | keyAgreement | ECDH Key Exchange | Opcionalno | ---- ===== Izlazne datoteke ===== ==== server.csr.pem ==== -----BEGIN CERTIFICATE REQUEST----- MIICxjCCAi0CAQAwgYExCz... (Base64 DER) -----END CERTIFICATE REQUEST----- ^ Polje ^ Vrijednost ^ | Version | 1 (0x00) | | Subject | CN=www.example.com, O=Example d.o.o., C=HR | | Public Key | ML-DSA-65 (~1.952 bajta) | | Attributes | Extension Request (SAN, Key Usage, EKU) | | Signature | ML-DSA-65 (Self-Proof-of-Possession) | ---- ===== Česte greške ===== ^ Problem ^ Uzrok ^ Rješenje ^ | CSR odbijen | CN nije u SAN | CN uvijek dodati i kao SAN | | CA ne prihvaća CSR | Pogrešan format | Provjeriti PEM format | | Nedostaje Key Usage | Ekstenzije nisu postavljene | Koristiti ExtBuilder | ---- ===== Povezani scenariji ===== ^ Povezanost ^ Scenarij ^ Opis ^ | **Sljedeći korak** | [[hr:int:pqcrypt:szenarien:zertifikate:server_cert|3.1 Serverski certifikat]] | Potpisivanje CSR od CA | | **Alternativa** | [[.:csr_multi_san|2.3 Multi-SAN CSR]] | Više domena | | **Povezano** | [[.:csr_client|2.2 Klijentski CSR]] | Za autentifikaciju klijenta | ---- << [[.:start|← Pregled CSR]] | [[hr:int:pqcrypt:szenarien:start|↑ Scenariji]] | [[.:csr_client|2.2 Klijentski CSR →]] >> {{tag>scenarij csr server tls san ml-dsa}} ---- //Wolfgang van der Stille @ EMSR DATA d.o.o. - Post-Quantum Cryptography Professional//