Scenarij 2.3: Kreiranje Multi-SAN CSR

Kategorija: Zahtjevi za certifikat (CSR)
Složenost: ⭐⭐⭐ (Srednje-visoka)
Preduvjeti: Par ključeva dostupan
Procijenjeno vrijeme: 10-15 minuta


Opis

Ovaj scenarij opisuje kreiranje CSR-a s više Subject Alternative Names (SAN). Ovo je potrebno za certifikate koji trebaju osigurati više domena, poddomena ili IP adresa.

Slučajevi uporabe:

  • Multi-domain certifikati (SAN certifikati)
  • Wildcard + eksplicitne domene kombinirano
  • Interna + eksterna imena
  • Load balancer s više backenda

SAN tipovi

Tip GeneralName Tag Primjer Uporaba
DNS dNSName (2) www.example.com Web stranice, API-ji
IP iPAddress (7) 192.168.1.100 Interni servisi
Email rfc822Name (1) admin@example.com S/MIME
URI uniformResourceIdentifier (6) https://example.com SAML, OIDC
UPN otherName (0) user@domain.local Windows Auth

Primjer koda (C#)

using WvdS.Security.Cryptography.X509Certificates.Extensions.PQ;
 
using var ctx = PqCryptoContext.Initialize();
using var key = ctx.GenerateKeyPair(PqAlgorithm.MlDsa65);
 
var dn = new DnBuilder()
    .AddCN("example.com")  // Primarna domena
    .AddO("Example d.o.o.")
    .AddC("HR")
    .Build();
 
// Multi-SAN s različitim tipovima
var extensions = new ExtBuilder()
    .SubjectAlternativeName(new[] {
        // DNS imena
        "dns:example.com",
        "dns:www.example.com",
        "dns:api.example.com",
        "dns:app.example.com",
        "dns:*.dev.example.com",      // Wildcard za dev
 
        // IP adrese (za interne pristupe)
        "ip:10.0.0.100",
        "ip:192.168.1.50",
 
        // IPv6
        "ip:2001:db8::1"
    })
    .KeyUsage(KeyUsageFlags.DigitalSignature | KeyUsageFlags.KeyEncipherment)
    .ExtendedKeyUsage(ExtKeyUsage.ServerAuth)
    .Build();
 
var csr = ctx.CreateCertificateRequest(key, dn, extensions);
 
// Ispis svih SAN-ova
Console.WriteLine("Subject Alternative Names:");
foreach (var san in csr.SubjectAlternativeNames)
{
    Console.WriteLine($"  - {san}");
}
 
File.WriteAllText("multi-san.csr.pem", csr.ToPem());

Kombinacija Wildcard + Explicit

var extensions = new ExtBuilder()
    .SubjectAlternativeName(new[] {
        "dns:example.com",           // Root domena (wildcard ovo ne pokriva!)
        "dns:*.example.com",         // Sve poddomene 1. razine
        "dns:*.api.example.com",     // API poddomene
        "dns:legacy.old-domain.com"  // Alternativna domena
    })
    .Build();

Važno: Wildcards (*.example.com) pokrivaju samo jednu razinu i ne pokrivaju samu root domenu! Stoga uvijek navedite example.com I *.example.com.


Kubernetes / Cloud-Native

var extensions = new ExtBuilder()
    .SubjectAlternativeName(new[] {
        // Kubernetes Service DNS
        "dns:my-service",
        "dns:my-service.default",
        "dns:my-service.default.svc",
        "dns:my-service.default.svc.cluster.local",
 
        // Headless Service (Pod DNS)
        "dns:*.my-service.default.svc.cluster.local",
 
        // Eksterna Ingress domena
        "dns:api.example.com"
    })
    .Build();

Ograničenja i najbolje prakse

Aspekt Preporuka Obrazloženje
Broj SAN-ova Maks. 100 Performanse, veličina certifikata
Wildcard razine Samo 1 razina RFC 6125 ograničenje
IP adrese Samo ako je potrebno IP-ovi se češće mijenjaju
Interna imena Odvojeni certifikati Sigurnosna separacija

Povezani scenariji

Povezanost Scenarij Opis
Sljedeći korak 3.1 Serverski certifikat Potpisivanje CSR
Alternativa 3.5 Wildcard certifikat Samo wildcard
Osnova 2.1 Server-CSR Jednostavan serverski CSR

« ← 2.2 Klijentski CSR | ↑ Pregled CSR | 2.4 Obrada CSR → »


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

Zuletzt geändert: 30.01.2026. u 00:20