Scenarij 3.1: Izdavanje poslužiteljskog certifikata

Kategorija: Izdavanje certifikata
Složenost: ⭐⭐⭐ (Srednje-Visoka)
Preduvjeti: CSR dostupan, Intermediate-CA
Procijenjeno vrijeme: 10-15 minuta


Opis

Ovaj scenarij opisuje izdavanje TLS poslužiteljskog certifikata putem Intermediate-CA. Certifikat omogućuje HTTPS šifriranje za web poslužitelje, API-je i druge TLS-zaštićene usluge.

Što se kreira:

  • X.509 v3 poslužiteljski certifikat
  • Potpisan s ML-DSA-65 (Post-Quantum)
  • Ekstenzije za TLS poslužitelj

Tijek rada

flowchart LR CSR[Učitavanje CSR-a] --> VERIFY[Verifikacija CSR-a] VERIFY --> EXT[Postavljanje ekstenzija] EXT --> SERIAL[Generiranje serijskog broja] SERIAL --> SIGN[Potpisivanje s CA] SIGN --> EXPORT[Izvoz kao PEM] style SIGN fill:#e8f5e9


Primjer koda (C#)

using WvdS.Security.Cryptography.X509Certificates.Extensions.PQ;
 
using var ctx = PqCryptoContext.Initialize();
 
// Učitavanje Intermediate-CA
var caCert = ctx.LoadCertificate("intermediate-ca.crt.pem");
var caKey = ctx.LoadPrivateKey("intermediate-ca.key.pem", "CaPassword!");
 
// Učitavanje i verifikacija CSR-a
var csr = ctx.LoadCertificateRequest(File.ReadAllText("server.csr.pem"));
if (!csr.VerifySignature())
    throw new CryptographicException("Nevaljani potpis CSR-a");
 
// Izdavanje poslužiteljskog certifikata
var serverCert = ctx.IssueCertificate(
    csr,
    issuerCert: caCert,
    issuerKey: caKey,
    serialNumber: ctx.GenerateSerialNumber(),
    validDays: 365,  // 1 godina
    extensions: new ExtBuilder()
        // Basic Constraints: Nije CA
        .BasicConstraints(ca: false, critical: true)
        // Key Usage za TLS
        .KeyUsage(KeyUsageFlags.DigitalSignature | KeyUsageFlags.KeyEncipherment, critical: true)
        // Extended Key Usage: Server Auth
        .ExtendedKeyUsage(ExtKeyUsage.ServerAuth)
        // Subject Key Identifier
        .SubjectKeyIdentifier(csr.PublicKey)
        // Authority Key Identifier
        .AuthorityKeyIdentifier(caCert)
        // CRL Distribution Point
        .CrlDistributionPoint("http://crl.example.com/intermediate.crl")
        // OCSP Responder
        .AuthorityInfoAccess(
            ocspUrl: "http://ocsp.example.com",
            caIssuersUrl: "http://ca.example.com/intermediate.crt"
        )
        .Build()
);
 
// Spremanje
serverCert.ToPemFile("server.crt.pem");
 
// Kreiranje lanca certifikata
var chain = $"{serverCert.ToPem()}\n{caCert.ToPem()}";
File.WriteAllText("server-chain.pem", chain);
 
Console.WriteLine("Poslužiteljski certifikat izdan:");
Console.WriteLine($"  Subject: {serverCert.Subject}");
Console.WriteLine($"  Issuer: {serverCert.Issuer}");
Console.WriteLine($"  Serial: {serverCert.SerialNumber}");
Console.WriteLine($"  Vrijedi do: {serverCert.NotAfter:yyyy-MM-dd}");

Ekstenzije za poslužiteljske certifikate

Ekstenzija Vrijednost Critical Opis
Basic Constraints CA=false Nije CA certifikat
Key Usage digitalSignature, keyEncipherment TLS-Handshake
Extended Key Usage serverAuth Autentifikacija poslužitelja
Subject Key Identifier Hash(PublicKey) ID ključa
Authority Key Identifier CA-SKI Referenca izdavatelja
Subject Alt Name DNS-imena Preuzeto iz CSR-a
CRL Distribution Points URL Provjera opoziva
Authority Info Access OCSP, CA Issuers Pomoć pri validaciji

Valjanosti specifične po industrijama

Industrija Valjanost Obrazloženje
Standardni IT 1 godina (365 dana) CA/Browser Forum maksimum
Energetika/SCADA 3-5 godina Dugi ciklusi održavanja
Zdravstvo 1-2 godine Zahtjevi usklađenosti
Automobilska 2-3 godine Životni ciklus vozila

Preporuka: Za javne web stranice maksimalno 398 dana (CA/B Forum). Za interne usluge mogu biti smislene dulje valjanosti.


Izlazne datoteke

server.crt.pem

-----BEGIN CERTIFICATE-----
MIIHxjCCBiagAwIBAgIUP7J2kM9x...
-----END CERTIFICATE-----

server-chain.pem

-----BEGIN CERTIFICATE-----
(Poslužiteljski certifikat)
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
(Intermediate-CA)
-----END CERTIFICATE-----

Nginx konfiguracija

server {
    listen 443 ssl;
    server_name www.example.com;
 
    ssl_certificate     /etc/nginx/ssl/server-chain.pem;
    ssl_certificate_key /etc/nginx/ssl/server.key.pem;
 
    ssl_protocols TLSv1.3;
    ssl_prefer_server_ciphers on;
}

Povezani scenariji

Odnos Scenarij Opis
Preduvjet 2.1 Poslužiteljski CSR Kreiranje CSR-a
Preduvjet 1.2 Intermediate-CA CA za potpisivanje
Sljedeći korak 10.1 Postavljanje TLS poslužitelja Implementacija certifikata
Povezano 3.2 Klijentski certifikat Za mTLS

« ← Pregled certifikata | ↑ Scenariji | 3.2 Klijentski certifikat → »


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

Zuletzt geändert: 30.01.2026. u 07:33