====== Scenarij 3.2: Izdavanje klijentskog certifikata ====== **Kategorija:** [[.:start|Izdavanje certifikata]] \\ **Složenost:** ⭐⭐⭐ (Srednje-Visoka) \\ **Preduvjeti:** CSR dostupan, Intermediate-CA \\ **Procijenjeno vrijeme:** 10-15 minuta ---- ===== Opis ===== Ovaj scenarij opisuje izdavanje **klijentskog certifikata** za mTLS autentifikaciju. Klijentski certifikati omogućuju jaku autentifikaciju korisnika ili servisa prema poslužiteljima. **Slučajevi uporabe:** * mTLS API pristup * Service-to-Service autentifikacija * VPN pristup * Smart Card / PIV prijava ---- ===== 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 CSR-a var csr = ctx.LoadCertificateRequest(File.ReadAllText("client.csr.pem")); csr.VerifySignature(); // Izdavanje klijentskog certifikata var clientCert = ctx.IssueCertificate( csr, issuerCert: caCert, issuerKey: caKey, serialNumber: ctx.GenerateSerialNumber(), validDays: 365, extensions: new ExtBuilder() .BasicConstraints(ca: false, critical: true) // Key Usage: Samo potpis (nema Key Encipherment za klijente) .KeyUsage(KeyUsageFlags.DigitalSignature, critical: true) // Extended Key Usage: Client Auth .ExtendedKeyUsage(ExtKeyUsage.ClientAuth) .SubjectKeyIdentifier(csr.PublicKey) .AuthorityKeyIdentifier(caCert) .CrlDistributionPoint("http://crl.example.com/intermediate.crl") .Build() ); clientCert.ToPemFile("client.crt.pem"); Console.WriteLine($"Klijentski certifikat izdan: {clientCert.Subject}"); ---- ===== Certifikat za servisni račun ===== Za mikroservise i automatizirane sustave: // Servisni certifikat s imenom servisnog računa var serviceCert = ctx.IssueCertificate( csr, issuerCert: caCert, issuerKey: caKey, validDays: 90, // Kratka valjanost za automatsku rotaciju extensions: new ExtBuilder() .BasicConstraints(ca: false) .KeyUsage(KeyUsageFlags.DigitalSignature) .ExtendedKeyUsage(ExtKeyUsage.ClientAuth) // Servisno-specifični SAN-ovi .SubjectAlternativeName(new[] { "dns:payment-service.internal", "uri:spiffe://cluster.local/ns/default/sa/payment-service" }) .Build() ); ---- ===== Razlika u odnosu na poslužiteljski certifikat ===== ^ Aspekt ^ Poslužiteljski certifikat ^ Klijentski certifikat ^ | Extended Key Usage | serverAuth | clientAuth | | Key Usage | digitalSignature + keyEncipherment | digitalSignature | | Subject | DNS-ime | Ime korisnika/servisa | | SAN tipovi | DNS, IP | Email, UPN, DNS | | Valjanost | 1-2 godine | 90 dana - 1 godina | ---- ===== PFX za Windows/preglednik ===== // Kreiranje PFX-a za uvoz u preglednik/Windows var pfxData = ctx.ExportToPfx( certificate: clientCert, privateKey: clientKey, chain: new[] { caCert }, password: "UserPassword123!", friendlyName: "Max Mustermann - Client Cert" ); File.WriteAllBytes("client.pfx", pfxData); ---- ===== Povezani scenariji ===== ^ Odnos ^ Scenarij ^ Opis ^ | **Preduvjet** | [[hr:int:pqcrypt:szenarien:csr:csr_client|2.2 Klijentski CSR]] | Kreiranje CSR-a | | **Sljedeći korak** | [[hr:int:pqcrypt:szenarien:authentifizierung:mtls_client_auth|9.1 mTLS klijentska autentifikacija]] | Uporaba certifikata | | **Povezano** | [[.:server_cert|3.1 Poslužiteljski certifikat]] | Protustrana | ---- << [[.:server_cert|← 3.1 Poslužiteljski certifikat]] | [[.:start|↑ Pregled certifikata]] | [[.:codesign_cert|3.3 Code-Signing →]] >> {{tag>scenarij certifikat klijent mtls autentifikacija}} ---- //Wolfgang van der Stille @ EMSR DATA d.o.o. - Post-Quantum Cryptography Professional//