Inhaltsverzeichnis

Scenarij 2.1: Kreiranje serverskog CSR

Kategorija: 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:

Slučajevi uporabe:


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