← Zurück zum Wiki
Grundlagen Zertifikatstypen Interne PKI vs. CA Let's Encrypt & ACME Formate & OpenSSL Best Practices

Grundlagen

Asymmetrische Kryptografie und warum ein Browser einem Zertifikat glaubt.

Öffentlicher & privater Schlüssel

Zertifikate beruhen auf asymmetrischer Kryptografie: ein Schlüsselpaar aus öffentlichem und privatem Schlüssel. Was mit dem einen verschlüsselt/signiert wird, lässt sich nur mit dem anderen prüfen/entschlüsseln.

  • Der private Schlüssel bleibt geheim auf dem Server und verlässt ihn nie.
  • Der öffentliche Schlüssel steckt im Zertifikat und wird frei verteilt.
  • Ein X.509-Zertifikat bindet den öffentlichen Schlüssel an eine Identität (Domainname, Organisation), bestätigt durch die Signatur einer CA.

Die Vertrauenskette

Ein Server-Zertifikat (Leaf) ist nur vertrauenswürdig, weil es Teil einer Chain of Trust ist:

  1. Root-CA: das oberste, selbstsignierte Zertifikat. Liegt im vertrauenswürdigen Wurzelspeicher von Betriebssystem/Browser.
  2. Intermediate-CA: von der Root signiert, signiert wiederum die Endzertifikate. Muss vom Server mit ausgeliefert werden.
  3. Leaf-Zertifikat: das eigentliche Server-Zertifikat für die Domain.

Der Client prüft die Signaturen von unten nach oben bis zu einer Root, der er vertraut. Fehlt das Intermediate-Zertifikat auf dem Server, schlägt die Prüfung bei vielen Clients fehl („unable to get local issuer certificate").

🔑
Der private Schlüssel ist das eigentliche Geheimnis. Wird er kompromittiert, muss das Zertifikat sofort widerrufen und neu ausgestellt werden, das Zertifikat selbst ist öffentlich und harmlos.

Zertifikatstypen

Was validiert wird und wie viele Namen ein Zertifikat abdeckt.

Validierungsstufen & Umfang

Die Stufe (DV/OV/EV) sagt aus, wie streng die CA die Identität prüft, die kryptografische Sicherheit der Verschlüsselung ist bei allen gleich. Umfang (Single/Wildcard/SAN) sagt, wie viele Namen abgedeckt sind.

Typ Prüfung / Abdeckung Einsatz
DV Domain Validated Nur Kontrolle über die Domain (DNS/HTTP-Challenge). In Minuten, automatisiert. Standard-Websites, APIs, interne Dienste. Let's Encrypt ist DV.
OV Organization Validated CA prüft zusätzlich die Existenz der Organisation. Firmen-Websites, wo der Betreiber sichtbar sein soll.
EV Extended Validation Umfangreiche rechtliche Prüfung der Organisation. Banken, Zahlungsdienste. Heute optisch kaum noch hervorgehoben.
Wildcard Deckt alle Subdomains einer Ebene ab: *.example.com. Viele Subdomains unter einer Domain. Nicht mehrstufig (*.a.example.com*.example.com).
SAN / Multi-Domain Mehrere feste Namen in einem Zertifikat (Subject Alternative Names). Ein Zertifikat für example.com, www.example.com, mail.example.com

SAN ist heute Pflicht

Moderne Clients ignorieren das alte Common Name-Feld und werten ausschließlich die Subject Alternative Names (SAN) aus. Jeder Name, unter dem ein Dienst erreichbar sein soll, muss als SAN im Zertifikat stehen, auch wenn er dem CN entspricht.

Interne PKI vs. öffentliche CAs

Selbst eine CA betreiben, oder Zertifikate von einer öffentlichen Stelle holen?

Öffentliche CAs

Öffentliche CAs (Let's Encrypt, DigiCert, Sectigo …) sind in allen gängigen Browsern/OS von Haus aus als vertrauenswürdig hinterlegt. Für alles, was aus dem Internet erreichbar ist (Websites, Mailserver, VPN-Gateways mit öffentlichem Namen), sind sie gesetzt, der Nutzer muss nichts installieren.

Interne PKI (AD Certificate Services)

Eine interne PKI, in Windows-Umgebungen die AD Certificate Services (AD CS), stellt eigene Zertifikate aus. Damit sie vertraut werden, wird die Root-CA einmalig per GPO in den Zertifikatspeicher aller Domänenrechner verteilt. Sinnvoll für:

  • Interne Dienste mit privaten Namen (server.firma.local), für die keine öffentliche CA ausstellen darf.
  • 802.1X / RADIUS, WLAN-Enterprise, VPN-Maschinenzertifikate, LDAPS auf Domänencontrollern.
  • Zertifikatsbasierte Anmeldung (Smartcard), Code Signing intern, Verschlüsselung (EFS).

Wichtig: Öffentliche CAs stellen seit Jahren keine Zertifikate mehr für interne TLDs wie .local oder reine Hostnamen aus. Wer solche Namen absichern will, braucht eine interne PKI, oder benennt Dienste auf echte, öffentlich auflösbare (Sub-)Domains um und nutzt Split-DNS.

⚠️
Eine interne PKI ist mächtig, aber Betrieb und Absicherung (offline Root-CA, CRL-Verteilung, Schlüsselschutz) sind nicht trivial. Für kleine Umgebungen oft der pragmatischere Weg: öffentliche Namen + Let's Encrypt statt eigener CA.

Let's Encrypt & Automatisierung

Kostenlose DV-Zertifikate, die sich selbst erneuern.

ACME, das Protokoll dahinter

Let's Encrypt ist eine kostenlose, automatisierte öffentliche CA. Die Ausstellung läuft über das ACME-Protokoll (Automatic Certificate Management Environment): Ein Client (z. B. certbot, acme.sh, oder eingebaut in Reverse-Proxys wie Caddy, Traefik, Nginx Proxy Manager) beweist der CA die Kontrolle über die Domain und bekommt automatisch das Zertifikat.

  • HTTP-01-Challenge: die CA ruft eine Datei unter /.well-known/acme-challenge/ ab, braucht Port 80 erreichbar.
  • DNS-01-Challenge: der Client legt einen TXT-Record an. Funktioniert auch ohne öffentlichen Webserver und ist Voraussetzung für Wildcard-Zertifikate.

Kurze Laufzeit = Automatisierung Pflicht

Let's-Encrypt-Zertifikate sind nur 90 Tage gültig. Das ist Absicht: Die Erneuerung muss automatisiert laufen (typisch ein Cron-/Timer-Job, der alle 60 Tage erneuert). Manuell ist das nicht handhabbar, und genau darin liegt der Sicherheitsgewinn: kurzlebige, automatisch rotierte Zertifikate.

Beispiel: certbot mit automatischer Erneuerung

Ausstellung inkl. Nginx-Konfiguration; die Erneuerung übernimmt der System-Timer.

# Zertifikat ausstellen und in Nginx einbinden certbot --nginx -d example.com -d www.example.com # Erneuerung testen (Trockenlauf, ändert nichts) certbot renew --dry-run

Formate & Umwandlung

PEM, DER, PFX, und wie man mit OpenSSL dazwischen wechselt.

Format Kodierung / Inhalt Typisch für
PEM (.pem/.crt/.cer/.key) Base64, Textblöcke -----BEGIN …-----. Kann Zertifikat, Kette und Key enthalten. Linux, Apache, Nginx, OpenSSL
DER (.der/.cer) Binär (nicht lesbar). Ein Objekt pro Datei. Java, manche Appliances
PFX / PKCS#12 (.pfx/.p12) Binärer, passwortgeschützter Container: Zertifikat + Kette + privater Schlüssel zusammen. Windows (IIS), Import/Export von Keys
CRT / KEY Nur Namenskonvention: .crt = Zertifikat, .key = privater Schlüssel (meist PEM). Getrennte Ablage bei Nginx/Apache

CSR und privaten Schlüssel erzeugen

Der Certificate Signing Request (CSR) enthält den öffentlichen Schlüssel und die gewünschten Namen; der private Schlüssel bleibt bei dir.

# 2048-Bit-RSA-Key + CSR in einem Schritt openssl req -new -newkey rsa:2048 -nodes \ -keyout example.key -out example.csr \ -subj "/CN=example.com/O=Beispiel GmbH/C=DE"

Zwischen PFX und PEM konvertieren

Häufig, wenn ein Zertifikat aus Windows (PFX) auf einen Linux-Webserver (PEM) soll, oder umgekehrt.

# PFX -> PEM (Zertifikat + Kette, ohne Key) openssl pkcs12 -in cert.pfx -clcerts -nokeys -out cert.pem # PFX -> privater Schlüssel (entschlüsselt) openssl pkcs12 -in cert.pfx -nocerts -nodes -out cert.key # PEM (+ Key + Kette) -> PFX für Windows/IIS openssl pkcs12 -export -out cert.pfx \ -inkey example.key -in example.crt -certfile chain.crt

Zertifikate prüfen & vergleichen

Inhalt anzeigen, Gültigkeit/SAN prüfen und sicherstellen, dass Key und Zertifikat zusammenpassen.

# Zertifikat lesbar ausgeben (Aussteller, Gültigkeit, SAN) openssl x509 -in example.crt -noout -text # Nur Ablaufdatum openssl x509 -in example.crt -noout -enddate # Live-Zertifikat eines Servers abrufen openssl s_client -connect example.com:443 -servername example.com # Passen Key und Zertifikat zusammen? (Hashes muessen gleich sein) openssl x509 -in example.crt -noout -modulus | openssl md5 openssl rsa -in example.key -noout -modulus | openssl md5

Best Practices

Damit Zertifikate nicht zur Störungsquelle werden.

  • Ablauf-Monitoring: abgelaufene Zertifikate sind die häufigste, absolut vermeidbare Ausfallursache. Ablaufdaten überwachen (Monitoring/Alerting) und, wo möglich, per ACME automatisch erneuern.
  • Schlüssellänge: mindestens RSA 2048 Bit (besser 3072/4096) oder ECDSA P-256/P-384. ECDSA ist bei gleicher Sicherheit deutlich performanter.
  • TLS-Versionen: nur TLS 1.2 und 1.3 zulassen. TLS 1.0/1.1 und SSLv3 abschalten, sie gelten als unsicher.
  • Vollständige Kette ausliefern: Server-Zertifikat + alle Intermediates. Mit einem SSL-Checker gegenprüfen, ob die Kette komplett ist.
  • Privaten Schlüssel schützen: Dateirechte streng setzen (nur der Dienst-Account/Root liest den Key), niemals per Mail/Chat verschicken, nach Verdacht auf Kompromittierung sofort neu ausstellen und widerrufen.
  • CAA-Record setzen: per DNS festlegen, welche CA für die Domain ausstellen darf, verhindert Fehlausstellungen durch fremde CAs.
Nach jeder Zertifikats-Änderung mit dem SSL-Checker prüfen: Gültigkeit, vollständige Kette, passende Namen (SAN) und aktive TLS-Versionen.