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