Ein häufiger, verwirrender Fehler: Die Website funktioniert auf Ihrem eigenen Rechner einwandfrei, doch bei einigen Besuchern, auf bestimmten Smartphones oder wenn ein anderes Programm (beispielsweise ein Zahlungssystem oder ein API-Client) eine Verbindung herstellt, wird ein Zertifikatsfehler angezeigt. Die Ursache ist meist ein fehlendes Zwischenzertifikat.
Was ist eine Zertifikatskette?
Browser und Betriebssysteme erkennen einige Dutzend vertrauenswürdige Stammzertifikate (Root-CA), die bereits vorinstalliert sind. Zertifizierungsstellen signieren die Zertifikate von Websites jedoch nicht direkt mit dem Stammzertifikat, sondern mit einem oder mehreren Zwischenzertifikaten (Intermediate-CA). Die Kette sieht wie folgt aus:
- Root-Zertifikat: im Browser bereits vorinstalliert.
- Zwischenzertifikat: vom Stammzertifikat signiert.
- Das Zertifikat der Website: Es wurde von der Zwischenzertifizierungsstelle signiert.
Der Browser akzeptiert das Zertifikat der Website nur dann, wenn er die Kette bis zum Stammzertifikat zurückverfolgen kann. Dazu muss der Server neben seinem eigenen Zertifikat auch das Zwischenzertifikat übermitteln. Die Datei, die das bzw. die Zwischenzertifikate enthält, wird als CA-Bundle bezeichnet.
Warum funktioniert es dann doch in einigen Browsern?
Einige Desktop-Browser speichern Zertifikate aus früheren Besuchen oder laden diese selbst herunter. Daher bleibt die lückenhafte Zertifikatskette auf dem Rechner des Entwicklers oft unbemerkt. Andere Geräte (viele Mobiltelefone, curl, PHP, Java sowie Zahlungs- und andere API-Dienste) tun dies nicht und melden einen Fehler.
Wie kann ich dies überprüfen?
Am einfachsten ist der kostenlose Test von Qualys SSL Labs: Ist die Zertifikatskette unvollständig, erscheint im Bericht die Zeile „Chain issues: Incomplete“.
Über die Befehlszeile:
openssl s_client -connect pelda.hu:443 -servername pelda.hu -showcerts </dev/null
In der Ausgabe müssen unter „Certificate chain“ mindestens zwei Zertifikate aufgeführt sein (das der Website und das Zwischenzertifikat). Ist nur eines vorhanden, fehlt das Zwischenzertifikat. Am Ende der Ausgabe zeigt „Verify return code: 0 (ok)“ an, dass die Zertifikatskette in Ordnung ist.
Wie kann ich das beheben?
Kostenloses Zertifikat auf dem Webhosting-Account
AutoSSL installiert das Zwischenzertifikat automatisch, sodass Sie nichts weiter tun müssen.
Bezahlte Zertifikate in cPanel
Wenn Sie das Zertifikat im Kundenbereich im Modus „Autoinstall“ (über cPanel) eingerichtet haben, installiert das Portal auch das Zwischenzertifikat. Bei manueller Installation:
- Laden Sie im Kundenbereich auf der Seite „Zertifikate“ das Zwischenzertifikat herunter („Zwischenzertifikat herunterladen“).
- Klicken Sie im cPanel im Bereich „Sicherheit“ auf das SSL/TLS-Symbol und anschließend auf den Link „SSL-Websites verwalten“.
- Fügen Sie das Zertifikat (Certificate: CRT), den privaten Schlüssel (Private Key: KEY) und das Zwischenzertifikat in das Feld „Certificate Authority Bundle: CABUNDLE“ ein.
- Klicken Sie auf die Schaltfläche „Install Certificate“.
Weitere Informationen: Wie kann ich mein bereits vorhandenes SSL-Zertifikat nutzen?
Auf einem eigenen Server (Nginx, Apache)
Am einfachsten ist es, wenn Sie das Zertifikat und das Zwischenzertifikat in einer Datei zusammenfassen (die Reihenfolge ist wichtig: zuerst das eigene, dann das Zwischenzertifikat):
cat pelda.hu.crt ca-bundle.crt > pelda.hu-fullchain.crt
Nginx:
ssl_certificate /etc/ssl/pelda.hu-fullchain.crt;
ssl_certificate_key /etc/ssl/pelda.hu.key;
Apache (2.4.8 oder höher):
SSLCertificateFile /etc/ssl/pelda.hu-fullchain.crt
SSLCertificateKeyFile /etc/ssl/pelda.hu.key
Laden Sie den Webserver nach der Änderung neu (mit „systemctl reload nginx“ oder „systemctl reload httpd“). Bei Let’s Encrypt-Zertifikaten liefert Certbot in der Datei „fullchain.pem“ bereits die zusammengefügte Zertifikatskette; diese muss dem Webserver angegeben werden, nicht die Datei „cert.pem“.
Ausführliche Informationen zur Apache-Konfiguration: Schritt-für-Schritt-Anleitung zur SSL-Einrichtung auf einem Apache-Server.
Fügen Sie kein Stammzertifikat in die Zertifikatskette ein
Das Stamm-Zertifikat muss nicht (und sollte auch nicht) an den Server gesendet werden, da es dem Browser bereits bekannt ist. Das überflüssige Zertifikat verlangsamt lediglich den Verbindungsaufbau.