„Връзката Ви не е поверителна“: предупреждението за SSL сертификат
· 2 мин. четене
Какво означава грешката
Браузърът се е свързал със сървъра, сървърът е представил своя сертификат и браузърът е отказал да му се довери. Chrome показва „Връзката Ви не е поверителна“ с код на грешка отдолу; Firefox „Предупреждение: потенциален риск за сигурността напред“; Safari „Тази връзка не е поверителна“. Сайтът не е хакнат и компютърът Ви не е заразен; сертификатът, който сървърът е изпратил, не минава проверките, които прави един браузър.
Кодът на грешката Ви казва коя проверка е пропаднала:
NET::ERR_CERT_DATE_INVALID: сертификатът е изтекъл или началната му дата е в бъдещето (или часовникът на посетителя е грешен).NET::ERR_CERT_COMMON_NAME_INVALID: сертификатът е за друго име, например заwww.example.com, но не заexample.com.NET::ERR_CERT_AUTHORITY_INVALID: браузърът не може да проследи сертификата до доверен орган: самоподписан, неизвестен издател или липсващ междинен сертификат.NET::ERR_CERT_REVOKED: сертификатът е бил отменен от издателя си.SSL_ERROR_BAD_CERT_DOMAINиSEC_ERROR_EXPIRED_CERTIFICATEса версиите на Firefox за грешките за име и дата.
Чести причини
- Сертификатът е изтекъл. Сертификатите на Let's Encrypt важат 90 дни; автоматичното подновяване се е провалило седмици наред и никой не е забелязал до деня, в който е изтекъл. Платените сертификати изтичат след година и имейлът за подновяване е отишъл на стар адрес.
- Подновен, но не презареден. certbot е записал новия сертификат на диска, но уеб сървърът още сервира стария от паметта, защото липсва куката за презареждане.
- Грешно име. Сертификатът покрива
example.com, но посетителите идват наwww.example.com, или е добавен нов поддомейн без сертификат. - Липсващ междинен сертификат. Сървърът изпраща само собствения си сертификат, не веригата. Настолните браузъри често запълват празнината от кеша; телефоните и приложенията се провалят.
- Проблем с часовника. На компютъра на посетителя грешна дата кара всеки сертификат да изглежда изтекъл или още невалиден. На сървъра грешен часовник чупи подновяването.
- CDN или прокси отпред със собствен сертификат, който е изтекъл или не покрива името, докато оригиналният сървър е наред.
Ако сте посетител
Първо проверете датата и часа на компютъра си; изтощена CMOS батерия или изключена синхронизация на времето кара всеки сайт да се провали. После опитайте друга мрежа. Ако предупреждението се появява само за един сайт и на всяко устройство, сертификатът на сайта е проблемът и собственикът трябва да го поправи. Натискането на „Продължи към сайта (опасно)“ е допустимо за сайт, който познавате, не за нищо с вход или плащане.
Ако е Вашият сайт: проверете първо
Пуснете SSL проверката. Тя показва срока на валидност, имената, за които е валиден сертификатът, и дали веригата е пълна, отвън, без никакъв кеш на браузър. После, на Ваш собствен сървър:
# what does the server actually send?
echo | openssl s_client -connect example.com:443 -servername example.com 2>/dev/null | openssl x509 -noout -dates -subject -ext subjectAltName
# what is on disk?
sudo certbot certificates
# is the server clock right?
timedatectl
Ако датите на диска са по-нови от датите, които сървърът изпраща, имате случай 2: подновен, но не презареден.
Поправки на Вашия собствен сървър
1. Подновете с certbot
sudo certbot renew
# or, if renew says "not yet due" but the served certificate is old:
sudo certbot renew --force-renewal
sudo systemctl reload nginx # or apache2
Ако подновяването се провали, изходът казва защо. Обичайните причини: портът 80 е блокиран или пренасочен някъде, където certbot не очаква (предизвикателството HTTP-01 изисква /.well-known/acme-challenge/ да е достъпно по обикновен HTTP), DNS записът сочи към друг сървър или е достигнато ограничение на честотата след много неуспешни опити. Поправете причината и изпълнявайте sudo certbot renew --dry-run, докато мине.
2. Направете презареждането автоматично
# Debian/Ubuntu: certbot installs a timer; check it
systemctl list-timers | grep certbot
# add a deploy hook so the web server picks up the new certificate
printf '#!/bin/sh\nsystemctl reload nginx\n' | sudo tee /etc/letsencrypt/renewal-hooks/deploy/reload-web.sh
sudo chmod +x /etc/letsencrypt/renewal-hooks/deploy/reload-web.sh
3. Добавете липсващото име
sudo certbot --nginx -d example.com -d www.example.com -d shop.example.com --expand
Флагът --expand заменя съществуващия сертификат с такъв, който покрива всички изброени имена.
4. Поправете веригата
С certbot насочете уеб сървъра към fullchain.pem, никога към cert.pem:
ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;
Apache: SSLCertificateFile с fullchain.pem. При закупен сертификат изтеглете междинния („CA bundle“) от издателя и го добавете в края на файла на сертификата. Тествайте със sudo nginx -t (Apache: sudo apachectl configtest), презаредете, после проверете веригата със SSL проверката.
5. Поправете часовника
sudo timedatectl set-ntp true
timedatectl
Сървър, чийто часовник се отклонява с повече от няколко минути, се проваля при валидиране на сертификати в двете посоки.
6. Споделен хостинг или конструктор на сайтове
Повечето хостинги издават и подновяват сертификати на Let's Encrypt от контролния панел („SSL/TLS“, „Security“, „Let's Encrypt“). Отворете го, проверете дали сертификатът покрива и example.com, и www.example.com, и натиснете подновяване или преиздаване. Ако панелът казва, че сертификатът е валиден, но браузърите не са съгласни, хостингът има проблем с презареждане или верига от своя страна.
Когато е проблем на Вашия хостинг
Здравейте, от около 06:00 UTC браузърите показват „Връзката Ви не е поверителна“ (NET::ERR_CERT_DATE_INVALID) за сайта ми example.com. Контролният панел показва валиден сертификат, така че уеб сървърът изглежда сервира стар. Моля, презаредете сертификата на сървъра и проверете автоматичното подновяване за домейна ми.
Как да предотвратите следващата
Изтеклият сертификат е единственият срив с известна дата. Мониторингът на SSL сертификати Ви предупреждава преди изтичането и отново, ако веригата или името са грешни; 5 проверки са безплатни. На Ваш собствен сървър Quick Fix подновява сертификата там, където е настроен certbot, и презарежда уеб сървъра, на фиксирана цена; Deep Fix настройва подновяване там, където още няма.
Какво сега
Проверете сертификата
Срок на валидност, верига и име на хост на всеки сертификат за секунди. Безплатно, без регистрация.
SSL проверкаСрив? Намесваме се.
На Ваш собствен сървър или в уеб пространство със SSH достъп: Quick Fix на фиксирана цена за честите причини, Deep Fix, таксуван на блокове от 15 минути, за останалото, денонощно. Цената е известна преди поръчката.
Поръчайте поправкаОще ръководства
- Сайтът Ви не работи. Ето какво да направите през първите 15 минути.
- Сървърът не работи: какво да проверите първо и в какъв ред
- 502 Bad Gateway: причини и как да я поправите
- 503 Service Unavailable: претоварване или поддръжка?
- 504 Gateway Timeout: какво означава и как да я поправите
- DNS_PROBE_FINISHED_NXDOMAIN: причини и поправки
- ERR_CONNECTION_REFUSED: причини и как да я поправите