Scenarij 3.2: Izdavanje klijentskog certifikata

Kategorija: 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 2.2 Klijentski CSR Kreiranje CSR-a
Sljedeći korak 9.1 mTLS klijentska autentifikacija Uporaba certifikata
Povezano 3.1 Poslužiteljski certifikat Protustrana

« ← 3.1 Poslužiteljski certifikat | ↑ Pregled certifikata | 3.3 Code-Signing → »


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

Zuletzt geändert: 30.01.2026. u 07:34