Certifikát webu prehliadač neprijme
Čo to je
Server na porte 443 odpovedá, ale certifikát, ktorý nám odovzdal, prehliadač neprijme. Skontrolovali sme ho rovnako ako prehliadač, len zvonku. Nič iné sme na vašom webe netestovali.
Podľa toho, čo sme videli, ide o jeden z týchto prípadov:
- Self-signed: certifikát si vystavil server sám a nikto dôveryhodný ho nepodpísal.
- Meno nesedí: certifikát je vystavený na inú doménu, ako na ktorej web beží (typicky predvolený certifikát hostingu).
- Nedôveryhodný reťazec: chýba sprostredkujúci (intermediate) certifikát, alebo certifikát podpísala neznáma či súkromná autorita.
- Ešte neplatí: začiatok platnosti (
notBefore) je v budúcnosti. - Slabý kľúč: RSA kľúč kratší než 2048 bitov alebo podpis cez SHA-1 či MD5.
Prečo je to problém
Návštevník väčšinou vidí celostránkové varovanie a väčšina ľudí stránku zavrie, rovnako ako pri vypršanom certifikáte. Chýbajúci sprostredkujúci certifikát je miernejší prípad: viaceré prehliadače si ho stiahnu samy, ale iní klienti zlyhajú (pozri nižšie).
- API klienti, platobné brány a mobilné aplikácie spojenie odmietnu.
- Vyhľadávače berú web ako nedôveryhodný.
- Zvyknúť si klikať na „aj tak pokračovať“ je presne to, čo útočníkovi na ceste pomáha podstrčiť vlastný certifikát.
Ako to opraviť
Najprv zistite, čo server posiela
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 vystaviteľa (issuer), platnosť a mená v subjectAltName. Podľa neho spoznáte, ktorý prípad máte.
Self-signed, neznáma autorita, zlé meno, slabý kľúč
Všetko rieši nový certifikát od verejnej autority, ktorý pokrýva doménu aj variant s www. Let’s Encrypt je zadarmo a nový certifikát má moderný kľúč:
sudo certbot --nginx -d example.cz -d www.example.czChýba sprostredkujúci certifikát
Server musí posielať celý reťazec, nielen svoj vlastný certifikát. Mnohé desktopové prehliadače túto medzeru zakryjú tým, že chýbajúci certifikát stiahnu samy (cez AIA), takže vám web môže fungovať. Niektorí klienti, napríklad API klienti, skripty, platobné brány a starší Android, to nerobia a spojenie odmietnu. Pri nginx použite súbor fullchain.pem, nie cert.pem:
ssl_certificate /etc/letsencrypt/live/example.cz/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/example.cz/privkey.pem;Pri Apache dajte fullchain.pem do SSLCertificateFile.
Ešte neplatí
Najčastejšie je zlý čas na serveri, ktorý certifikát vystavoval. Skontrolujte date a synchronizáciu času (NTP), potom certifikát vystavte znova.
Zdieľaný hosting
V administrácii hľadajte sekciu SSL alebo HTTPS a pridajte certifikát pre vašu doménu. Ak predvolený certifikát hostingu zostáva, napíšte podpore.