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