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