SSL_ERROR_BAD_CERT_DOMAIN: certyfikat wystawiony na inny adres
W skrócie
Certyfikat, który pokazał serwer, jest wystawiony na inne nazwy niż adres w pasku przeglądarki, na przykład tylko na firma.pl, a otwierasz www.firma.pl. Chrome pokazuje w tej sytuacji „Połączenie nie jest prywatne”. Właściciel strony naprawia to jednym certyfikatem dla wszystkich adresów strony, przypisanym do właściwej domeny.
Co oznacza ten błąd
Certyfikat zawiera listę nazw (adresów), dla których jest ważny. Firefox pokazuje SSL_ERROR_BAD_CERT_DOMAIN, gdy adresu z paska przeglądarki nie ma na tej liście. Nagłówek ostrzeżenia to „Zachowaj ostrożność. Coś tu nie gra.” (w starszych wersjach „Ostrzeżenie: potencjalne zagrożenie bezpieczeństwa”). Po kliknięciu „Zaawansowane” Firefox pisze, że certyfikat nie jest ważny dla tego adresu, i od razu podaje, dla jakich jest: „Certyfikat jest ważny wyłącznie dla: …”. Kod jest niżej, po słowach „Kod błędu”.
Chrome pokazuje w tej sytuacji „Połączenie nie jest prywatne” z kodem NET::ERR_CERT_COMMON_NAME_INVALID. Edge pokazuje podobne ostrzeżenie z tym samym kodem. Po kliknięciu „Zaawansowane” Chrome pisze na przykład: „Ten serwer nie mógł udowodnić, że należy do www.firma.pl. Jego certyfikat pochodzi z firma.pl.”. Druga nazwa to jeden z adresów, na które wystawiono certyfikat.
Jeśli to cudza strona
- Nie wpisuj na niej haseł, danych karty ani danych osobowych.
- Sprawdź adres. Czasem działa wersja z www albo bez www; wpisz adres ręcznie zamiast korzystać ze starej zakładki.
- Firefox sam pisze, że problem najpewniej leży po stronie witryny. W sieci firmowej zapytaj dział IT, a jeśli używasz programu antywirusowego, sprawdź, czy nie ma w nim znanych problemów z połączeniami szyfrowanymi.
- Daj znać właścicielowi strony i podaj adres, pod którym widzisz ostrzeżenie.
Najczęstsze przyczyny na Twojej stronie
- Certyfikat bez www albo bez adresu głównego. Certyfikat wystawiono tylko na
firma.pl, a strona otwiera się też jakowww.firma.pl, albo odwrotnie. To dwie różne nazwy i obie muszą być w certyfikacie. - Subdomena spoza certyfikatu, np.
sklep.firma.pl, gdy certyfikat obejmuje tylkofirma.pliwww.firma.pl. - Certyfikat z gwiazdką obejmuje mniej, niż się wydaje.
*.firma.plobejmujewww.firma.plisklep.firma.pl, ale nie samąfirma.plania.b.firma.pl. - Serwer pokazuje ogólny certyfikat hostingu. Gdy do domeny nie przypisano certyfikatu, serwer odpowiada swoim certyfikatem domyślnym, wystawionym na nazwę hostingu albo serwera.
- Adres prowadzi na inny serwer. Na przykład po przeniesieniu strony rekord DNS dla
wwwnadal wskazuje stary hosting, na którym nie ma Twojego certyfikatu.
Jak sprawdzić, na jakie adresy wystawiono certyfikat
- Firefox: na stronie z ostrzeżeniem kliknij „Zaawansowane”. Lista nazw jest po słowach „Certyfikat jest ważny wyłącznie dla:”. Wszystkie szczegóły zobaczysz po kliknięciu „Wyświetl certyfikat witryny”, w części „Alternatywne nazwy podmiotu” (każda nazwa w wierszu „Nazwa DNS”).
- Chrome: gdy adres otwiera się bez ostrzeżenia, kliknij ikonę obok adresu, potem „Połączenie jest bezpieczne” i „Certyfikat jest ważny”. Nazwy są w zakładce „Szczegóły”.
- Poleceniem openssl (Linux, macOS, w Windows Git Bash):
echo | openssl s_client -connect twojadomena.pl:443 \ -servername twojadomena.pl 2>/dev/null \ | openssl x509 -noout -text | grep -A1 "Subject Alternative Name"
W odpowiedzi zobaczysz nazwy z przedrostkiemDNS:, np.DNS:firma.pl, DNS:www.firma.pl.
Jak naprawić to na swojej stronie
- Spisz wszystkie adresy, pod którymi otwiera się strona: zwykle
firma.pliwww.firma.pl, czasem też subdomeny. - Wygeneruj w generatorze jeden certyfikat dla wszystkich tych nazw, oddzielonych przecinkiem, np.
firma.pl, www.firma.pl(do 10 nazw). Dla wielu subdomen wpiszfirma.pl, *.firma.pl(bez osobnego www, bo obejmuje je gwiazdka); certyfikat z gwiazdką wymaga potwierdzenia rekordem DNS. - Wgraj certyfikat według instrukcji dla swojego hostingu i sprawdź w panelu, czy jest przypisany do domeny, pod którą działa strona.
- Na własnym serwerze obie nazwy muszą być w konfiguracji portu 443: w nginx w linii
server_namebloku zlisten 443 ssl, w Apache wServerNameiServerAliasbloku<VirtualHost *:443>. - Jeśli adres prowadzi na inny serwer, popraw rekord A (albo CNAME) w strefie DNS domeny.
- Sprawdź w oknie prywatnym oba adresy, z www i bez. Jak potem przekierować wszystkich na jeden adres, opisujemy na stronie Przekierowanie z http na https.