====== Scenarij 2.1: Ustvarjanje strežniškega CSR ====== **Kategorija:** [[.:start|Zahteve za certifikate (CSR)]] \\ **Kompleksnost:** 2/5 (Srednja) \\ **Predpogoji:** Par ključev na voljo \\ **Ocenjeni čas:** 5-10 minut ---- ===== Opis ===== Ta scenarij opisuje ustvarjanje **Certificate Signing Request (CSR)** za TLS-strežniški certifikat. CSR vsebuje vse informacije, ki jih CA potrebuje za izdajo strežniškega certifikata. **Kaj se ustvari:** * ML-DSA-65 par ključev (ali hibridni) * CSR s strežniškim DN in razširitvami * Subject Alternative Names (SAN) za DNS-imena **Primeri uporabe:** * HTTPS spletni strežniki * API-končne točke * Mikrostoritve s TLS ---- ===== Potek dela ===== flowchart LR KEY[Generiranje para ključev] --> DN[Ustvarjanje DN] DN --> EXT[Nastavitev razširitev] EXT --> CSR[Ustvarjanje CSR] CSR --> SIGN[Podpisovanje CSR] SIGN --> EXPORT[Izvoz kot PEM] style CSR fill:#e8f5e9 ---- ===== Vključene funkcije ===== ^ Korak ^ FFI-funkcija ^ Opis ^ | 1 | ''wvds_sec_crypto_x509_keypair_generate_mldsa(65)'' | Generiranje para ključev | | 2 | ''wvds_sec_crypto_x509_dn_create()'' | Ustvarjanje DN-ročaja | | 3 | ''wvds_sec_crypto_x509_dn_add_component()'' | Dodajanje CN, O, C | | 4 | ''wvds_sec_crypto_x509_ext_set_san_dns()'' | Dodajanje DNS-imen | | 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()'' | Ustvarjanje CSR | | 8 | ''wvds_sec_crypto_x509_csr_sign()'' | Podpisovanje CSR z zasebnim ključem | | 9 | ''wvds_sec_crypto_x509_csr_to_pem()'' | Izvoz kot PEM | ---- ===== Primer kode (C#) ===== using WvdS.Security.Cryptography.X509Certificates.Extensions.PQ; // 1. Inicializacija konteksta using var ctx = PqCryptoContext.Initialize(); // 2. Generiranje para ključev za strežnik 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-oddelek") .AddC("SI") .AddL("Ljubljana") .Build(); // 4. Razširitve za strežniški 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. Ustvarjanje in podpisovanje CSR var csr = ctx.CreateCertificateRequest(serverKey, dn, extensions); // 6. Shranjevanje kot PEM File.WriteAllText("server.csr.pem", csr.ToPem()); File.WriteAllText("server.key.pem", serverKey.ToEncryptedPem("VarnoGeslo123!")); Console.WriteLine("CSR ustvarjen: server.csr.pem"); Console.WriteLine($"Subject: {csr.Subject}"); Console.WriteLine($"SANs: {string.Join(", ", csr.SubjectAlternativeNames)}"); ---- ===== Parametri ===== ==== Subject Alternative Names ==== ^ Tip ^ Predpona ^ Primer ^ | DNS-ime | dns: | www.example.com | | IP-naslov | ip: | 192.168.1.100 | | E-pošta | email: | admin@example.com | | URI | uri: | https://example.com | ==== Key Usage za strežnike ==== ^ Zastavica ^ Opis ^ Obvezno ^ | digitalSignature | Podpisovanje TLS-handshake | Da | | keyEncipherment | RSA Key Exchange (ne za ECDHE) | Opcijsko | | keyAgreement | ECDH Key Exchange | Opcijsko | ---- ===== Izhodne datoteke ===== ==== server.csr.pem ==== -----BEGIN CERTIFICATE REQUEST----- MIICxjCCAi0CAQAwgYExCz... (Base64 DER) -----END CERTIFICATE REQUEST----- ^ Polje ^ Vrednost ^ | Version | 1 (0x00) | | Subject | CN=www.example.com, O=Example d.o.o., C=SI | | Public Key | ML-DSA-65 (~1.952 bajtov) | | Attributes | Extension Request (SAN, Key Usage, EKU) | | Signature | ML-DSA-65 (Self-Proof-of-Possession) | ---- ===== Pogoste napake ===== ^ Problem ^ Vzrok ^ Rešitev ^ | CSR zavrnjen | CN ni v SAN | CN vedno dodajte tudi kot SAN | | CA ne sprejme CSR | Napačen format | Preverite PEM-format | | Key Usage manjka | Razširitve niso nastavljene | Uporabite ExtBuilder | ---- ===== Povezani scenariji ===== ^ Povezava ^ Scenarij ^ Opis ^ | **Naslednji korak** | [[sl:int:pqcrypt:szenarien:zertifikate:server_cert|3.1 Strežniški certifikat]] | Podpis CSR s strani CA | | **Alternativa** | [[.:csr_multi_san|2.3 Multi-SAN CSR]] | Več domen | | **Povezano** | [[.:csr_client|2.2 Odjemalčev CSR]] | Za overitev odjemalca | ---- << [[.:start|Pregled CSR]] | [[sl:int:pqcrypt:szenarien:start|Scenariji]] | [[.:csr_client|2.2 Odjemalčev CSR]] >> {{tag>scenarij csr strežnik tls san ml-dsa}} ---- //Wolfgang van der Stille @ EMSR DATA d.o.o. - Post-Quantum Cryptography Professional//