====== Scenario 3.5: Emettere certificato Wildcard ======
**Categoria:** [[.:start|Emettere certificati]] \\
**Complessità:** Alta \\
**Prerequisiti:** Controllo dominio, Intermediate-CA \\
**Tempo stimato:** 15-20 minuti
----
===== Descrizione =====
Questo scenario descrive l'emissione di un **certificato Wildcard** (''*.example.com''). I certificati Wildcard proteggono tutti i sottodomini di un dominio con un singolo certificato.
**Vantaggi:**
* Un certificato per tutti i sottodomini
* Gestione semplificata
* Più conveniente
**Svantaggi:**
* Rischio maggiore in caso di compromissione
* Non copre il dominio root
* Solo un livello
----
===== Regole Wildcard =====
^ Pattern ^ Copre ^ NON copre ^
| ''*.example.com'' | www.example.com, api.example.com | example.com, sub.api.example.com |
| ''*.api.example.com'' | v1.api.example.com | api.example.com |
**Importante:** ''*.example.com'' NON copre ''example.com'' (senza sottodominio)! Aggiungere sempre entrambi come SAN.
----
===== Esempio codice (C#) =====
using WvdS.Security.Cryptography.X509Certificates.Extensions.PQ;
using var ctx = PqCryptoContext.Initialize();
var caCert = ctx.LoadCertificate("intermediate-ca.crt.pem");
var caKey = ctx.LoadPrivateKey("intermediate-ca.key.pem", "CaPassword!");
// Schlüsselpaar für Wildcard
using var wildcardKey = ctx.GenerateKeyPair(PqAlgorithm.MlDsa65);
var dn = new DnBuilder()
.AddCN("*.example.com")
.AddO("Example GmbH")
.AddC("DE")
.Build();
// CSR erstellen
var csr = ctx.CreateCertificateRequest(
wildcardKey, dn,
new ExtBuilder()
// Wildcard + Root-Domain
.SubjectAlternativeName(new[] {
"dns:*.example.com",
"dns:example.com"
})
.Build()
);
// Wildcard-Zertifikat ausstellen
var wildcardCert = ctx.IssueCertificate(
csr,
issuerCert: caCert,
issuerKey: caKey,
serialNumber: ctx.GenerateSerialNumber(),
validDays: 365,
extensions: new ExtBuilder()
.BasicConstraints(ca: false, critical: true)
.KeyUsage(KeyUsageFlags.DigitalSignature | KeyUsageFlags.KeyEncipherment)
.ExtendedKeyUsage(ExtKeyUsage.ServerAuth)
.SubjectKeyIdentifier(csr.PublicKey)
.AuthorityKeyIdentifier(caCert)
.CrlDistributionPoint("http://crl.example.com/intermediate.crl")
.Build()
);
wildcardCert.ToPemFile("wildcard.crt.pem");
wildcardKey.ToEncryptedPemFile("wildcard.key.pem", "SecurePassword!");
----
===== Wildcard multi-livello =====
Per più livelli di sottodominio combinare più wildcard:
.SubjectAlternativeName(new[] {
"dns:example.com",
"dns:*.example.com", // www, api, app, etc.
"dns:*.dev.example.com", // dev1.dev, dev2.dev, etc.
"dns:*.staging.example.com" // staging environments
})
----
===== Note di sicurezza =====
**Rischi dei certificati Wildcard:**
* Una compromissione interessa TUTTI i sottodomini
* La chiave privata è necessaria in più luoghi
* La revoca interessa tutti i servizi
**Best Practice:**
* Conservare la chiave privata centralmente (HSM)
* Validità breve (max. 1 anno)
* Certificati Wildcard separati per Prod/Dev/Staging
* Monitoraggio per tutti i sottodomini
----
===== Scenari correlati =====
^ Relazione ^ Scenario ^ Descrizione ^
| **Alternativa** | [[.:server_cert|3.1 Certificato server]] | Certificato singolo |
| **Alternativa** | [[it:int:pqcrypt:szenarien:csr:csr_multi_san|2.3 CSR Multi-SAN]] | SAN espliciti |
| **Passo successivo** | [[it:int:pqcrypt:szenarien:tls:server_setup|10.1 Server TLS]] | Deployment |
----
<< [[.:smime_cert|← 3.4 Certificato S/MIME]] | [[.:start|↑ Panoramica certificati]] | [[it:int:pqcrypt:szenarien:verwaltung:start|4. Gestire certificati →]] >>
{{tag>scenario certificato wildcard sottodominio tls}}
----
//Wolfgang van der Stille @ EMSR DATA d.o.o. - Post-Quantum Cryptography Professional//