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