Kategorija: Zahteve za certifikate (CSR)
Kompleksnost: 3/5 (Srednje-visoka)
Predpogoji: Par ključev na voljo
Ocenjeni čas: 10-15 minut
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:
| Tip | GeneralName Tag | Primer | Uporaba |
|---|---|---|---|
| DNS | dNSName (2) | www.example.com | Spletne strani, API-ji |
| IP | iPAddress (7) | 192.168.1.100 | Notranje storitve |
| rfc822Name (1) | admin@example.com | S/MIME | |
| URI | uniformResourceIdentifier (6) | https://example.com | SAML, OIDC |
| UPN | otherName (0) | user@domain.local | Windows overitev |
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());
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.
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();
| 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 |
| 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