Scenarij 2.1: Ustvarjanje strežniškega CSR

Kategorija: 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 3.1 Strežniški certifikat Podpis CSR s strani CA
Alternativa 2.3 Multi-SAN CSR Več domen
Povezano 2.2 Odjemalčev CSR Za overitev odjemalca

« Pregled CSR | Scenariji | 2.2 Odjemalčev CSR »


Wolfgang van der Stille @ EMSR DATA d.o.o. - Post-Quantum Cryptography Professional

Zuletzt geändert: dne 30.01.2026 ob 01:39