Перейти к содержанию
Innovialabs

Частые ошибки SSL-сертификата и как их исправить

Практика3 мин

Коротко

Почти все проблемы с SSL сводятся к пяти причинам: сертификат истёк, не покрывает имя сайта, отдаётся без промежуточной цепочки, страница грузит ресурсы по HTTP или HTTP и HTTPS перенаправляют друг на друга по кругу.

Коротко: пять типичных ошибок

Симптом в браузереПричинаИсправление
NET::ERR_CERT_DATE_INVALIDсертификат истёкпродлить и перезагрузить веб-сервер
ERR_CERT_COMMON_NAME_INVALIDимя сайта не входит в сертификатперевыпустить с нужными именами
ошибка только на части устройств или в curlнеполная цепочкаотдавать fullchain
«Не защищено», значок замка с предупреждениемсмешанный контентперевести ресурсы на HTTPS
ERR_TOO_MANY_REDIRECTSцикл редиректоводно место для редиректа, правильный режим прокси

Точные тексты ошибок отличаются в разных браузерах, но причины те же.

Сначала посмотрите, что на самом деле отдаёт сервер:

echo | openssl s_client -connect example.com:443 -servername example.com 2>/dev/null | openssl x509 -noout -subject -issuer -dates -ext subjectAltName

Команда покажет, на какие имена выпущен сертификат, кто его выдал и до какой даты он действует.

1. Сертификат истёк

Как понять: дата notAfter в выводе выше уже прошла.

Что делать:

  • продлите сертификат (для Let's Encrypt — sudo certbot renew);
  • перезагрузите веб-сервер: частая ситуация, когда новый файл уже лежит на диске, а сервер отдаёт старый из памяти;
  • настройте автопродление и внешний мониторинг срока действия.

Если ошибка появляется у одного пользователя, а у остальных всё в порядке, проверьте дату и время на его устройстве: неверные часы дают ту же ошибку.

2. Имя не совпадает с сертификатом

Как понять: в списке subjectAltName нет имени, которое открывает посетитель. Классика: сертификат на example.com, а заходят на www.example.com.

Что делать:

  • перевыпустите сертификат со всеми нужными именами: -d example.com -d www.example.com;
  • помните, что wildcard *.example.com не покрывает сам example.com и вложенные имена вроде a.b.example.com;
  • если на одном IP несколько сайтов, проверьте, что для каждого server_name указан свой сертификат: при ошибке сервер отдаёт сертификат сайта по умолчанию.

3. Неполная цепочка сертификатов

Как понять: в настольном браузере сайт открывается, а на части телефонов, в curl или в интеграциях — ошибка вроде «unable to get local issuer certificate». Браузеры иногда достраивают цепочку сами, другие клиенты этого не делают.

openssl s_client -connect example.com:443 -servername example.com -showcerts </dev/null

Если в выводе только один сертификат, промежуточного не хватает.

Что делать: укажите в конфиге файл с полной цепочкой. Для Let's Encrypt это fullchain.pem. Для платного сертификата склейте свой сертификат и промежуточный от центра сертификации в один файл — сначала ваш, затем промежуточный.

ssl_certificate     /etc/letsencrypt/live/example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;

4. Смешанный контент

Как понять: сертификат в порядке, но браузер ругается на страницу, а в консоли разработчика есть предупреждения Mixed Content. Страница по HTTPS загружает картинки, скрипты или стили по http://.

Что делать:

  • замените ссылки на https:// или относительные пути;
  • в CMS обновите адрес сайта в настройках и пройдитесь по базе, где сохранены старые ссылки;
  • как временную страховку добавьте заголовок:
add_header Content-Security-Policy "upgrade-insecure-requests";

Заголовок попросит браузер грузить ресурсы по HTTPS, но если ресурс по HTTPS недоступен, он всё равно не загрузится.

5. Бесконечные редиректы

Как понять: ERR_TOO_MANY_REDIRECTS. Посмотрите цепочку:

curl -sIL http://example.com | grep -i -E "^(HTTP|location)"

Типичные причины:

  • CDN или прокси в режиме «Flexible» (например, в Cloudflare): посетитель приходит по HTTPS, прокси идёт к серверу по HTTP, а сервер редиректит на HTTPS — и так по кругу. Решение: установить сертификат на сервере и включить режим Full (strict).
  • Приложение за прокси не видит HTTPS. Передавайте заголовок X-Forwarded-Proto и настройте приложение доверять ему.
  • Редирект настроен в двух местах — в веб-сервере и в CMS или плагине, и они противоречат друг другу (например, www против без www). Оставьте одно правило.

Частые вопросы

Чаще всего веб-сервер не перезагружен или конфиг указывает на другой файл. Реже ответ отдаёт CDN, на котором сертификат управляется отдельно.

Поможем с этим

Если хотите не разбираться самим, а получить результат — этим мы занимаемся каждый день.

Обсудить проект

Читайте также

Есть идея или задача? Расскажите нам

Ответим в течение рабочего дня и предложим решение. Консультация бесплатная.