Scenarij 2.3: Ustvarjanje Multi-SAN CSR

Kategorija: Zahteve za certifikate (CSR)
Kompleksnost: 3/5 (Srednje-visoka)
Predpogoji: Par ključev na voljo
Ocenjeni čas: 10-15 minut


Opis

Ta scenarij opisuje ustvarjanje CSR z več Subject Alternative Names (SANs). To je potrebno za certifikate, ki naj varujejo več domen, poddomen ali IP-naslovov.

Primeri uporabe:

  • Multi-domenski certifikati (SAN-certifikati)
  • Wildcard + eksplicitne domene kombinirano
  • Notranja + zunanja imena
  • Load balancer z več zaledji

Tipi SAN

Tip GeneralName Tag Primer Uporaba
DNS dNSName (2) www.example.com Spletne strani, API-ji
IP iPAddress (7) 192.168.1.100 Notranje storitve
Email rfc822Name (1) admin@example.com S/MIME
URI uniformResourceIdentifier (6) https://example.com SAML, OIDC
UPN otherName (0) user@domain.local Windows overitev

Primer kode (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("SI")
    .Build();
 
// Multi-SAN z različnimi tipi
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-naslovi (za notranje dostope)
        "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);
 
// Izpis vseh SAN-ov
Console.WriteLine("Subject Alternative Names:");
foreach (var san in csr.SubjectAlternativeNames)
{
    Console.WriteLine($"  - {san}");
}
 
File.WriteAllText("multi-san.csr.pem", csr.ToPem());

Kombiniranje Wildcard + Explicit

var extensions = new ExtBuilder()
    .SubjectAlternativeName(new[] {
        "dns:example.com",           // Korenska domena (wildcard je ne pokrije!)
        "dns:*.example.com",         // Vse poddomene 1. ravni
        "dns:*.api.example.com",     // API-poddomene
        "dns:legacy.old-domain.com"  // Alternativna domena
    })
    .Build();

Pomembno: Wildcard-i (*.example.com) pokrijejo samo eno raven in ne korenske domene same! Zato vedno navedite example.com IN *.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",
 
        // Zunanja Ingress domena
        "dns:api.example.com"
    })
    .Build();

Omejitve in najboljše prakse

Vidik Priporočilo Utemeljitev
Število SAN-ov Maks. 100 Zmogljivost, velikost certifikata
Wildcard ravni Samo 1 raven Omejitev RFC 6125
IP-naslovi Samo ko je potrebno IP-ji se pogosteje spreminjajo
Notranja imena Ločeni certifikati Varnostna ločitev

Povezani scenariji

Povezava Scenarij Opis
Naslednji korak 3.1 Strežniški certifikat Podpis CSR
Alternativa 3.5 Wildcard-certifikat Samo wildcard
Osnova 2.1 Strežniški CSR Enostaven strežniški CSR

« 2.2 Odjemalčev CSR | Pregled CSR | 2.4 Obdelava CSR »


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

Zuletzt geändert: dne 30.01.2026 ob 01:40