Kategorija: Zahtjevi za certifikat (CSR)
Složenost: ⭐⭐ (Srednja)
Preduvjeti: Par ključeva dostupan
Procijenjeno vrijeme: 5-10 minuta
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:
Slučajevi uporabe:
| 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 |
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)}");
| Tip | Prefiks | Primjer |
|---|---|---|
| DNS ime | dns: | www.example.com |
| IP adresa | ip: | 192.168.1.100 |
| email: | admin@example.com | |
| URI | uri: | https://example.com |
| Zastavica | Opis | Obavezno |
|---|---|---|
| digitalSignature | Potpisivanje TLS handshake | ✅ |
| keyEncipherment | RSA Key Exchange (ne za ECDHE) | Opcionalno |
| keyAgreement | ECDH Key Exchange | Opcionalno |
-----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) |
| 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 |
| Povezanost | Scenarij | Opis |
|---|---|---|
| Sljedeći korak | 3.1 Serverski certifikat | Potpisivanje CSR od CA |
| Alternativa | 2.3 Multi-SAN CSR | Više domena |
| Povezano | 2.2 Klijentski CSR | Za autentifikaciju klijenta |
« ← Pregled CSR | ↑ Scenariji | 2.2 Klijentski CSR → »
Wolfgang van der Stille @ EMSR DATA d.o.o. - Post-Quantum Cryptography Professional