====== Szenario 3.5: Wildcard-Zertifikat ausstellen ======
**Kategorie:** [[.:start|Zertifikate ausstellen]] \\
**Komplexität:** ⭐⭐⭐⭐ (Hoch) \\
**Voraussetzungen:** Domain-Kontrolle, Intermediate-CA \\
**Geschätzte Zeit:** 15-20 Minuten
----
===== Beschreibung =====
Dieses Szenario beschreibt die Ausstellung eines **Wildcard-Zertifikats** (''*.example.com''). Wildcard-Zertifikate sichern alle Subdomains einer Domain mit einem einzigen Zertifikat ab.
**Vorteile:**
* Ein Zertifikat für alle Subdomains
* Einfachere Verwaltung
* Kosteneffizienter
**Nachteile:**
* Höheres Risiko bei Kompromittierung
* Deckt Root-Domain nicht ab
* Nur eine Ebene
----
===== Wildcard-Regeln =====
^ Muster ^ Deckt ab ^ Deckt NICHT ab ^
| ''*.example.com'' | www.example.com, api.example.com | example.com, sub.api.example.com |
| ''*.api.example.com'' | v1.api.example.com | api.example.com |
**Wichtig:** ''*.example.com'' deckt ''example.com'' (ohne Subdomain) NICHT ab! Immer beide als SAN hinzufügen.
----
===== Code-Beispiel (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!");
----
===== Multi-Level Wildcard =====
Für mehrere Subdomain-Ebenen mehrere Wildcards kombinieren:
.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
})
----
===== Sicherheitshinweise =====
**Risiken von Wildcard-Zertifikaten:**
* Kompromittierung betrifft ALLE Subdomains
* Private Key wird an mehreren Stellen benötigt
* Revocation betrifft alle Dienste
**Best Practices:**
* Private Key zentral speichern (HSM)
* Kurze Gültigkeit (max. 1 Jahr)
* Separate Wildcard-Zertifikate für Prod/Dev/Staging
* Monitoring für alle Subdomains
----
===== Verwandte Szenarien =====
^ Beziehung ^ Szenario ^ Beschreibung ^
| **Alternative** | [[.:server_cert|3.1 Server-Zertifikat]] | Einzelnes Zertifikat |
| **Alternative** | [[de:int:pqcrypt:szenarien:csr:csr_multi_san|2.3 Multi-SAN CSR]] | Explizite SANs |
| **Nächster Schritt** | [[de:int:pqcrypt:szenarien:tls:server_setup|10.1 TLS-Server]] | Deployment |
----
<< [[.:smime_cert|← 3.4 S/MIME-Zertifikat]] | [[.:start|↑ Zertifikate-Übersicht]] | [[de:int:pqcrypt:szenarien:verwaltung:start|4. Zertifikate verwalten →]] >>
{{tag>szenario zertifikat wildcard subdomain tls}}
----
//Wolfgang van der Stille @ EMSR DATA d.o.o. - Post-Quantum Cryptography Professional//