Зачем проверять SSL-сертификат
SSL-сертификат обеспечивает шифрование данных между браузером пользователя и сервером. Без него соединение идет по HTTP в открытом виде, и любой может перехватить передаваемую информацию — логины, пароли, данные форм. Браузеры давно маркируют HTTP-сайты как небезопасные, и это напрямую влияет на доверие посетителей.
Для SEO наличие HTTPS — подтвержденный фактор ранжирования и в Google, и в Яндексе. Сайт без SSL теряет позиции при прочих равных. Кроме того, просроченный или неправильно установленный сертификат блокирует доступ к сайту — браузер покажет предупреждение, и большинство пользователей просто уйдут.
Пошаговая инструкция
Шаг 1. Проверьте наличие и валидность сертификата
Откройте сайт в браузере и посмотрите на адресную строку. Рядом с URL должен быть значок замка. Нажмите на него — браузер покажет информацию о сертификате: кем выдан, для какого домена, срок действия.
Для детальной проверки используйте сервис SSL Labs (ssllabs.com/ssltest/). Введите адрес сайта и дождитесь результата. Сервис оценивает конфигурацию по шкале от A+ до F и показывает все проблемы: устаревшие протоколы, слабые шифры, ошибки цепочки сертификатов.
Целевая оценка — A или A+. Если результат B и ниже, есть проблемы, которые стоит исправить.
Шаг 2. Проверьте срок действия
SSL-сертификаты имеют ограниченный срок действия — обычно 90 дней (Let’s Encrypt) или 1 год (коммерческие). Если сертификат истечет, сайт станет недоступен для большинства пользователей.
Узнать дату истечения можно несколькими способами:
- Нажмите на замок в браузере → «Сертификат» → посмотрите поле «Действителен до».
- В SSL Labs дата отображается в блоке «Certificate #1».
- Через терминал:
echo | openssl s_client -connect site.ru:443 2>/dev/null | openssl x509 -noout -dates
Если используете Let’s Encrypt с автоматическим продлением через Certbot, проверьте, что задание cron или systemd-таймер на продление работает. Запустите: certbot renew --dry-run. Если команда завершается без ошибок — автопродление в порядке.
Шаг 3. Найдите и устраните mixed content
Mixed content — это когда страница загружена по HTTPS, но часть ресурсов (картинки, скрипты, стили) подтягивается по HTTP. Браузер может заблокировать такие ресурсы или показать предупреждение, а замок в адресной строке пропадет.
Как найти mixed content:
- Инструменты разработчика в браузере. Откройте DevTools (F12) → вкладка Console. Ошибки mixed content отображаются как предупреждения с текстом «Mixed Content» или «This request has been blocked».
- Why No Padlock (
whynopadlock.com) — сервис сканирует страницу и показывает все HTTP-ресурсы. - Screaming Frog — при сканировании сайта покажет все страницы с mixed content в соответствующем отчете.
Как устранить:
- Замените все ссылки на ресурсы с
http://наhttps://. Это касается картинок в контенте, подключаемых шрифтов, внешних скриптов. - В WordPress выполните поиск и замену в базе данных: замените
http://site.ruнаhttps://site.ru. Используйте плагин Better Search Replace или утилиту WP-CLI:wp search-replace 'http://site.ru' 'https://site.ru'. - Проверьте, что тема и плагины не подключают ресурсы по HTTP жестко прописанными URL.
Шаг 4. Настройте редирект HTTP на HTTPS
Все запросы по HTTP должны автоматически перенаправляться на HTTPS с кодом 301.
Для Nginx:
server {
listen 80;
server_name site.ru www.site.ru;
return 301 https://site.ru$request_uri;
}
Для Apache (.htaccess):
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}/$1 [R=301,L]
После настройки проверьте: откройте http://site.ru и убедитесь, что происходит редирект на https://site.ru. Проверьте также внутренние страницы — редирект должен работать для всех URL, а не только для главной.
Шаг 5. Включите HSTS
HSTS (HTTP Strict Transport Security) — это HTTP-заголовок, который сообщает браузеру: «В ближайшее время обращайся к этому сайту только по HTTPS». После получения этого заголовка браузер больше не будет отправлять HTTP-запросы к сайту, а сразу переключится на HTTPS. Это устраняет даже миллисекундное окно при HTTP-редиректе.
Для Nginx:
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;
Для Apache:
Header always set Strict-Transport-Security "max-age=31536000; includeSubDomains"
Параметр max-age=31536000 означает, что браузер будет помнить о HTTPS один год. Параметр includeSubDomains распространяет политику на все поддомены — добавляйте его, только если все поддомены тоже работают по HTTPS.
Начните с короткого max-age (например, 300 секунд) и убедитесь, что все работает. Затем увеличьте до года. Откатить HSTS сложно — если сертификат сломается, а HSTS активен, пользователи не смогут зайти на сайт даже по HTTP.
Шаг 6. Проверьте сертификат для всех доменов
Если сайт доступен по нескольким адресам (site.ru, www.site.ru), сертификат должен покрывать все варианты. Let’s Encrypt позволяет указать несколько доменов при выпуске:
certbot certonly -d site.ru -d www.site.ru
Если сертификат выпущен только для site.ru, при заходе на www.site.ru браузер покажет ошибку. Даже если стоит редирект, браузер сначала проверяет сертификат, а потом обрабатывает редирект — и если сертификат невалиден для запрошенного домена, пользователь увидит предупреждение.
Типичные ошибки
- Просроченный сертификат. Самая банальная и при этом критичная ошибка. Сайт полностью блокируется браузером. Настройте автоматическое продление и мониторинг срока действия.
- Mixed content после переезда на HTTPS. Картинки и скрипты грузятся по HTTP. Замок пропадает, доверие падает. Часто встречается в старых записях блога, где URL картинок прописаны вручную.
- Самоподписанный сертификат. Допустим для тестовых серверов, но на боевом сайте вызывает предупреждение браузера. Используйте Let’s Encrypt — это бесплатно и признается всеми браузерами.
- Неполная цепочка сертификатов. Если не установлен промежуточный сертификат, некоторые устройства (особенно старые Android) не смогут проверить подлинность. SSL Labs явно показывает эту ошибку.
- HSTS без проверки. Включили HSTS с долгим max-age, а потом оказалось, что один из поддоменов не поддерживает HTTPS. Пользователи теряют доступ к поддомену до истечения max-age в их браузере.
Что проверить в итоге
- Сайт открывается по HTTPS, в адресной строке отображается замок без предупреждений.
- Оценка на SSL Labs — не ниже A.
- Сертификат покрывает все используемые домены (основной + www).
- Срок действия сертификата — не менее 14 дней до истечения, автопродление настроено.
- На страницах нет mixed content — консоль браузера чиста от предупреждений.
- HTTP-запросы перенаправляются на HTTPS с кодом 301.
- Заголовок HSTS настроен и отдается сервером (проверьте через
curl -I https://site.ru). - В базе WordPress все URL используют HTTPS (нет остаточных http:// в контенте).