Der Browser akzeptiert das Zertifikat Ihrer Website nicht
Worum es geht
Der Server antwortet auf Port 443, aber das Zertifikat, das er uns geliefert hat, würde ein Browser nicht akzeptieren. Wir haben es so geprüft wie ein Browser, nur von außen. Sonst haben wir an Ihrer Website nichts getestet.
Nach dem, was wir gesehen haben, handelt es sich um einen dieser Fälle:
- Selbstsigniert: Der Server hat das Zertifikat selbst ausgestellt, und keine vertrauenswürdige Stelle hat es signiert.
- Name passt nicht: Das Zertifikat wurde für eine andere Domain ausgestellt als die, unter der die Website läuft (typisch: das Standardzertifikat des Hosters).
- Nicht vertrauenswürdige Kette: Ein Zwischenzertifikat fehlt, oder eine unbekannte oder private Zertifizierungsstelle hat signiert.
- Noch nicht gültig: Der Gültigkeitsbeginn (
notBefore) liegt in der Zukunft. - Schwacher Schlüssel: ein RSA-Schlüssel unter 2048 Bit oder eine Signatur mit SHA-1 oder MD5.
Warum das ein Problem ist
Besucher sehen meist eine ganzseitige Warnung, und die meisten schließen den Tab, wie bei einem abgelaufenen Zertifikat. Ein fehlendes Zwischenzertifikat ist der mildere Fall: Viele Browser laden es selbst nach, andere Clients scheitern aber (siehe unten).
- API-Clients, Zahlungs-Gateways und mobile Apps lehnen die Verbindung ab.
- Suchmaschinen stufen die Website als nicht vertrauenswürdig ein.
- Sich an „trotzdem fortfahren“ zu gewöhnen, hilft genau dem Angreifer auf dem Netzwerkpfad, ein eigenes Zertifikat unterzuschieben.
Wie Sie es beheben
Zuerst prüfen, was der Server sendet
openssl s_client -connect example.cz:443 -servername example.cz </dev/null 2>/dev/null |
openssl x509 -noout -subject -issuer -dates -ext subjectAltNameDie Ausgabe zeigt den Aussteller (issuer), die Gültigkeit und die Namen in subjectAltName. Daran erkennen Sie, welcher Fall vorliegt.
Selbstsigniert, unbekannte Stelle, falscher Name, schwacher Schlüssel
Alles löst ein neues Zertifikat einer öffentlichen Zertifizierungsstelle, das die Domain und die Variante mit www abdeckt. Let’s Encrypt ist kostenlos und stellt moderne Schlüssel aus:
sudo certbot --nginx -d example.cz -d www.example.czZwischenzertifikat fehlt
Der Server muss die ganze Kette senden, nicht nur sein eigenes Zertifikat. Viele Desktop-Browser überdecken die Lücke, indem sie das fehlende Zertifikat selbst nachladen (per AIA), sodass die Website bei Ihnen funktionieren kann. Manche Clients, etwa API-Clients, Skripte, Zahlungs-Gateways und ältere Android-Versionen, tun das nicht und lehnen die Verbindung ab. Bei nginx verwenden Sie fullchain.pem, nicht cert.pem:
ssl_certificate /etc/letsencrypt/live/example.cz/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/example.cz/privkey.pem;Bei Apache gehört fullchain.pem in SSLCertificateFile.
Noch nicht gültig
Meist war die Uhr auf dem Rechner falsch, der das Zertifikat ausgestellt hat. Prüfen Sie date und die Zeitsynchronisation (NTP) und stellen Sie das Zertifikat dann neu aus.
Shared Hosting
Suchen Sie im Kundenbereich den Abschnitt SSL oder HTTPS und fügen Sie ein Zertifikat für Ihre Domain hinzu. Bleibt das Standardzertifikat des Hosters bestehen, wenden Sie sich an den Support.