Direkt zum Hauptinhalt

TLS-Zertifikate: Kette, Ablauf, typische Fehler

Prüfen kannst du jeden Server mit dem SSL/TLS-Check, auch Mailserver per STARTTLS.

Die Zertifikatskette

Ein Browser vertraut einer kleinen Zahl von Wurzelzertifikaten. Dein Server-Zertifikat ist aber von einem Zwischenzertifikat signiert. Damit der Client die Kette prüfen kann, muss der Server ihm sein Zertifikat und alle Zwischenzertifikate schicken, die Wurzel nicht.

Häufigster Fehler: Es wird nur das eigene Zertifikat ausgeliefert. Browser holen das Fehlende manchmal selbst nach, Apps, Skripte und Mailserver nicht. Die Folge: „unable to get local issuer certificate“.

Software richtig
nginx ssl_certificate /etc/letsencrypt/live/example.de/fullchain.pem;
Apache 2.4.8+ SSLCertificateFile …/fullchain.pem
Postfix smtpd_tls_chain_files = …/privkey.pem, …/fullchain.pem

Ablauf und Erneuerung

Zertifikate von Let's Encrypt gelten 90 Tage, künftig noch kürzer. Ohne automatische Erneuerung läuft es garantiert irgendwann ab.

  • certbot: certbot renew --dry-run testet die Erneuerung. Nach dem Erneuern muss der Dienst neu laden, z. B. mit --deploy-hook "systemctl reload nginx".
  • Caddy, Traefik erneuern selbst.
  • Nicht vergessen: Mailserver, VPN, Proxmox, NAS und alles, was ein Zertifikat per Hand bekommen hat.

Damit es nicht überraschend kommt: Im Monitoring (Premium) eine Zertifikats-Prüfung anlegen, sie warnt 14 Tage vorher.

Typische Fehlermeldungen

Meldung Ursache
Name passt nicht (hostname mismatch) Der aufgerufene Name steht nicht in den SANs des Zertifikats. Mit allen Namen neu ausstellen.
Zertifikat abgelaufen Erneuerung läuft nicht oder der Dienst hat das neue Zertifikat nicht geladen
selbst signiert Kein Zertifikat einer öffentlichen Stelle. Für öffentliche Dienste Let's Encrypt nehmen.
unvollständige Kette siehe oben, fullchain statt cert

Protokolle und HSTS

  • TLS 1.2 und 1.3 an, 1.0 und 1.1 aus. Alte Versionen braucht heute kein aktueller Client mehr.
  • HSTS (Strict-Transport-Security: max-age=31536000) sorgt dafür, dass Browser nur noch per HTTPS kommen. Erst setzen, wenn HTTPS überall sicher läuft, auch auf Subdomains, falls du includeSubDomains nutzt.