====== Szenario 3.1: Server-Zertifikat ausstellen ======
**Kategorie:** [[.:start|Zertifikate ausstellen]] \\
**Komplexität:** ⭐⭐⭐ (Mittel-Hoch) \\
**Voraussetzungen:** CSR vorhanden, Intermediate-CA \\
**Geschätzte Zeit:** 10-15 Minuten
----
===== Beschreibung =====
Dieses Szenario beschreibt die Ausstellung eines **TLS-Serverzertifikats** durch eine Intermediate-CA. Das Zertifikat ermöglicht HTTPS-Verschlüsselung für Webserver, APIs und andere TLS-geschützte Dienste.
**Was wird erstellt:**
* X.509 v3 Server-Zertifikat
* Signiert mit ML-DSA-65 (Post-Quantum)
* Extensions für TLS-Server
----
===== Workflow =====
flowchart LR
CSR[CSR laden] --> VERIFY[CSR verifizieren]
VERIFY --> EXT[Extensions setzen]
EXT --> SERIAL[Serial generieren]
SERIAL --> SIGN[Mit CA signieren]
SIGN --> EXPORT[Als PEM exportieren]
style SIGN fill:#e8f5e9
----
===== Code-Beispiel (C#) =====
using WvdS.Security.Cryptography.X509Certificates.Extensions.PQ;
using var ctx = PqCryptoContext.Initialize();
// Intermediate-CA laden
var caCert = ctx.LoadCertificate("intermediate-ca.crt.pem");
var caKey = ctx.LoadPrivateKey("intermediate-ca.key.pem", "CaPassword!");
// CSR laden und verifizieren
var csr = ctx.LoadCertificateRequest(File.ReadAllText("server.csr.pem"));
if (!csr.VerifySignature())
throw new CryptographicException("Ungültige CSR-Signatur");
// Server-Zertifikat ausstellen
var serverCert = ctx.IssueCertificate(
csr,
issuerCert: caCert,
issuerKey: caKey,
serialNumber: ctx.GenerateSerialNumber(),
validDays: 365, // 1 Jahr
extensions: new ExtBuilder()
// Basic Constraints: Kein CA
.BasicConstraints(ca: false, critical: true)
// Key Usage für TLS
.KeyUsage(KeyUsageFlags.DigitalSignature | KeyUsageFlags.KeyEncipherment, critical: true)
// Extended Key Usage: Server Auth
.ExtendedKeyUsage(ExtKeyUsage.ServerAuth)
// Subject Key Identifier
.SubjectKeyIdentifier(csr.PublicKey)
// Authority Key Identifier
.AuthorityKeyIdentifier(caCert)
// CRL Distribution Point
.CrlDistributionPoint("http://crl.example.com/intermediate.crl")
// OCSP Responder
.AuthorityInfoAccess(
ocspUrl: "http://ocsp.example.com",
caIssuersUrl: "http://ca.example.com/intermediate.crt"
)
.Build()
);
// Speichern
serverCert.ToPemFile("server.crt.pem");
// Zertifikatskette erstellen
var chain = $"{serverCert.ToPem()}\n{caCert.ToPem()}";
File.WriteAllText("server-chain.pem", chain);
Console.WriteLine("Server-Zertifikat ausgestellt:");
Console.WriteLine($" Subject: {serverCert.Subject}");
Console.WriteLine($" Issuer: {serverCert.Issuer}");
Console.WriteLine($" Serial: {serverCert.SerialNumber}");
Console.WriteLine($" Gültig bis: {serverCert.NotAfter:yyyy-MM-dd}");
----
===== Extensions für Server-Zertifikate =====
^ Extension ^ Wert ^ Critical ^ Beschreibung ^
| Basic Constraints | CA=false | ✅ | Kein CA-Zertifikat |
| Key Usage | digitalSignature, keyEncipherment | ✅ | TLS-Handshake |
| Extended Key Usage | serverAuth | ❌ | Server-Authentifizierung |
| Subject Key Identifier | Hash(PublicKey) | ❌ | Schlüssel-ID |
| Authority Key Identifier | CA-SKI | ❌ | Issuer-Referenz |
| Subject Alt Name | DNS-Namen | ❌ | Aus CSR übernommen |
| CRL Distribution Points | URL | ❌ | Revocation-Prüfung |
| Authority Info Access | OCSP, CA Issuers | ❌ | Validierungshilfen |
----
===== Branchenspezifische Gültigkeiten =====
^ Branche ^ Gültigkeit ^ Begründung ^
| **Standard IT** | 1 Jahr (365 Tage) | CA/Browser Forum Maximum |
| **Energie/SCADA** | 3-5 Jahre | Lange Wartungszyklen |
| **Healthcare** | 1-2 Jahre | Compliance-Anforderungen |
| **Automotive** | 2-3 Jahre | Fahrzeug-Lebenszyklus |
**Empfehlung:** Für öffentliche Websites max. 398 Tage (CA/B Forum). Für interne Dienste können längere Gültigkeiten sinnvoll sein.
----
===== Ausgabe-Dateien =====
==== server.crt.pem ====
-----BEGIN CERTIFICATE-----
MIIHxjCCBiagAwIBAgIUP7J2kM9x...
-----END CERTIFICATE-----
==== server-chain.pem ====
-----BEGIN CERTIFICATE-----
(Server-Zertifikat)
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
(Intermediate-CA)
-----END CERTIFICATE-----
----
===== Nginx Konfiguration =====
server {
listen 443 ssl;
server_name www.example.com;
ssl_certificate /etc/nginx/ssl/server-chain.pem;
ssl_certificate_key /etc/nginx/ssl/server.key.pem;
ssl_protocols TLSv1.3;
ssl_prefer_server_ciphers on;
}
----
===== Verwandte Szenarien =====
^ Beziehung ^ Szenario ^ Beschreibung ^
| **Voraussetzung** | [[de:int:pqcrypt:szenarien:csr:csr_server|2.1 Server-CSR]] | CSR erstellen |
| **Voraussetzung** | [[de:int:pqcrypt:szenarien:pki:intermediate_ca_erstellen|1.2 Intermediate-CA]] | Signierende CA |
| **Nächster Schritt** | [[de:int:pqcrypt:szenarien:tls:server_setup|10.1 TLS-Server einrichten]] | Zertifikat deployen |
| **Verwandt** | [[.:client_cert|3.2 Client-Zertifikat]] | Für mTLS |
----
<< [[.:start|← Zertifikate-Übersicht]] | [[de:int:pqcrypt:szenarien:start|↑ Szenarien]] | [[.:client_cert|3.2 Client-Zertifikat →]] >>
{{tag>szenario zertifikat server tls https x509}}
----
//Wolfgang van der Stille @ EMSR DATA d.o.o. - Post-Quantum Cryptography Professional//