Certifikát webu prohlížeč nepřijme
Co to je
Server na portu 443 sice odpovídá, ale certifikát, který nám předal, prohlížeč nepřijme. Zkontrolovali jsme ho stejně jako prohlížeč, jen zvenku. Nic dalšího jsme na vašem webu netestovali.
Podle toho, co jsme viděli, jde o jeden z těchto případů:
- Self-signed: certifikát si vystavil server sám a nikdo důvěryhodný ho nepodepsal.
- Jméno nesedí: certifikát je vystavený na jinou doménu, než na které web běží (typicky výchozí certifikát hostingu).
- Nedůvěryhodný řetězec: chybí prostřední (intermediate) certifikát, nebo certifikát podepsala neznámá či soukromá autorita.
- Ještě neplatí: začátek platnosti (
notBefore) je v budoucnosti. - Slabý klíč: RSA klíč kratší než 2048 bitů nebo podpis přes SHA-1 či MD5.
Proč je to problém
Návštěvník většinou vidí celostránkové varování a většina lidí stránku zavře, stejně jako u vypršelého certifikátu. Chybějící prostřední certifikát je mírnější případ: řada prohlížečů si ho stáhne sama, ale jiní klienti selžou (viz níže).
- API klienti, platební brány a mobilní aplikace spojení odmítnou.
- Vyhledávače web berou jako nedůvěryhodný.
- Zvyknout si klikat na „přesto pokračovat“ je přesně to, co útočníkovi na cestě pomáhá podstrčit vlastní certifikát.
Jak to opravit
Nejdřív zjistěte, co server posílá
openssl s_client -connect example.cz:443 -servername example.cz </dev/null 2>/dev/null |
openssl x509 -noout -subject -issuer -dates -ext subjectAltNameVýpis ukáže vystavitele (issuer), platnost a jména v subjectAltName. Podle něj poznáte, který případ máte.
Self-signed, neznámá autorita, špatné jméno, slabý klíč
Všechno řeší nový certifikát od veřejné autority, který pokrývá doménu i variantu s www. Let’s Encrypt je zdarma a nový certifikát má moderní klíč:
sudo certbot --nginx -d example.cz -d www.example.czChybí prostřední certifikát
Server musí posílat celý řetězec, ne jen svůj vlastní certifikát. Mnoho desktopových prohlížečů tuhle mezeru zakryje tím, že chybějící certifikát stáhnou samy (přes AIA), takže vám web může fungovat. Někteří klienti, třeba API klienti, skripty, platební brány a starší Android, to nedělají a spojení odmítnou. U nginx použijte soubor fullchain.pem, ne cert.pem:
ssl_certificate /etc/letsencrypt/live/example.cz/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/example.cz/privkey.pem;U Apache dejte fullchain.pem do SSLCertificateFile.
Ještě neplatí
Nejčastěji je špatně čas na serveru, který certifikát vystavoval. Zkontrolujte date a synchronizaci času (NTP), pak certifikát vystavte znovu.
Sdílený hosting
V administraci hledejte sekci SSL nebo HTTPS a přidejte certifikát pro vaši doménu. Pokud výchozí certifikát hostingu zůstává, napište podpoře.