====== Scenarij 2.3: Ustvarjanje Multi-SAN CSR ======
**Kategorija:** [[.:start|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** | [[sl:int:pqcrypt:szenarien:zertifikate:server_cert|3.1 Strežniški certifikat]] | Podpis CSR |
| **Alternativa** | [[sl:int:pqcrypt:szenarien:zertifikate:wildcard_cert|3.5 Wildcard-certifikat]] | Samo wildcard |
| **Osnova** | [[.:csr_server|2.1 Strežniški CSR]] | Enostaven strežniški CSR |
----
<< [[.:csr_client|2.2 Odjemalčev CSR]] | [[.:start|Pregled CSR]] | [[.:csr_verarbeiten|2.4 Obdelava CSR]] >>
{{tag>scenarij csr san multi-domena wildcard}}
----
//Wolfgang van der Stille @ EMSR DATA d.o.o. - Post-Quantum Cryptography Professional//