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