====== Scenarij 3.1: Izdavanje poslužiteljskog certifikata ======
**Kategorija:** [[.:start|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** | [[hr:int:pqcrypt:szenarien:csr:csr_server|2.1 Poslužiteljski CSR]] | Kreiranje CSR-a |
| **Preduvjet** | [[hr:int:pqcrypt:szenarien:pki:intermediate_ca_erstellen|1.2 Intermediate-CA]] | CA za potpisivanje |
| **Sljedeći korak** | [[hr:int:pqcrypt:szenarien:tls:server_setup|10.1 Postavljanje TLS poslužitelja]] | Implementacija certifikata |
| **Povezano** | [[.:client_cert|3.2 Klijentski certifikat]] | Za mTLS |
----
<< [[.:start|← Pregled certifikata]] | [[hr:int:pqcrypt:szenarien:start|↑ Scenariji]] | [[.:client_cert|3.2 Klijentski certifikat →]] >>
{{tag>scenarij certifikat poslužitelj tls https x509}}
----
//Wolfgang van der Stille @ EMSR DATA d.o.o. - Post-Quantum Cryptography Professional//