HTTPS для собственного сайта: SSL-сертификат, HSTS и исправление смешанного контента
1. Выбор сертификата и автопродление: не покупайте OV-сертификат и не продлевайте вручную
Многие в первый год покупают платный SSL-сертификат, на второй год забывают продлить и получают красное предупреждение в браузере. Контринтуитивный вывод: для подавляющего большинства B2B-сайтов бесплатного DV-сертификата Let’s Encrypt вполне достаточно — он даёт и OCSP stapling, и рейтинг A+. Наличие названия компании в платном OV-сертификате не оказывает измеримого влияния на конверсию.
При выборе сертификата есть только два жёстких критерия: первый — алгоритм ключа, выбирайте ECDSA P-256, а не RSA 2048: рукопожатие на 40% меньше, первая загрузка на мобильных быстрее примерно на 80 миллисекунд; второй — способ продления, обязательно используйте certbot или acme.sh для автопродления, crontab проверяет раз в день, и никогда не продлевайте вручную. 90% инцидентов с истёкшими сертификатами происходит из-за увольнения ответственного или простой забывчивости.
| Тип сертификата | Годовая стоимость | Отображение в браузере | Для чего подходит | Рекомендация |
|---|---|---|---|---|
| Let’s Encrypt DV ECDSA | 0 ₽ | Замок безопасности, без названия компании | Подавляющее большинство B2B-сайтов | Выбор по умолчанию, автопродление |
| Let’s Encrypt DV RSA | 0 ₽ | Замок безопасности, без названия компании | Нужна совместимость со старыми устройствами | Только при наличии трафика из IE11 |
| Платный OV-сертификат | 2000–8000 юаней в год | Зелёное название компании | Финансы, платежи, высокий средний чек | Покупать только при необходимости |
| Платный EV-сертификат | 5000–20000 юаней в год | Метка EV (в большинстве браузеров отменена) | Практически нет сценариев | Не рекомендуется |
Пример: SaaS-компания из Ханчжоу выходит на зарубежный рынок, получает сертификат Let’s Encrypt через acme.sh и прописывает в crontab строку 0 3 * * 1 /root/.acme.sh/acme.sh –renew -d example.com — автоматическая проверка и продление каждый понедельник в 3 часа ночи. Параллельно добавляется правило мониторинга: если до истечения сертификата осталось меньше 15 дней, отправляется уведомление в WeCom. Такая конфигурация настраивается один раз и не требует внимания два года.
Как работать с мультидоменными и wildcard-сертификатами, и Глобальное ускорение CDN Стратегию сертификатов для узлов нужно планировать вместе. CDN-провайдеры обычно предоставляют собственные edge-сертификаты; сертификаты origin и edge нужно управлять раздельно и не допускать, чтобы продление edge-сертификата зависело от origin.
2. HSTS: включайте поэтапно, не переходите сразу к максимуму
HSTS (HTTP Strict Transport Security) — это заголовок ответа, который заставляет браузер работать только по HTTPS. Контринтуитивность в том, что чем больше max-age, тем безопаснее, но и тем опаснее. Если сразу поставить max-age=31536000, ваши тестовые среды, staging-поддомены и внутренние админки год не смогут открываться по HTTP, а любая проблема с сертификатом положит весь сайт.
Правильный график перехода — три ступени: первая неделя max-age=300 (5 минут), следим за жалобами пользователей и сбоями; со второй по четвёртую неделю max-age=86400 (1 день), убеждаемся, что всё в порядке; и только через месяц поднимаем до max-age=31536000 (1 год) и добавляем includeSubDomains. В preload-список отправлять ещё позже — рекомендуем после 3 месяцев стабильной работы подать заявку в chromium preload.
| Этап | Как прописать заголовок HSTS | Период наблюдения | Риски |
|---|---|---|---|
| Первый уровень | Strict-Transport-Security: max-age=300 | 1 неделя | Риска почти нет, можно откатить в любой момент |
| Второй уровень | max-age=86400 | 1 месяц | Отдельные старые браузеры могут не поддерживать |
| Третий уровень | max-age=31536000; includeSubDomains | 3 месяца | Все поддомены должны быть готовы к HTTPS |
| Финальная ступень | Добавить директиву preload и отправить заявку на hstspreload.org | Долгосрочный | После отправки убрать почти невозможно |
Пример из практики: сайт промышленного оборудования для экспорта, основной домен example.com работает по HTTPS, а legacy.example.com — всё ещё по HTTP. Если сразу включить includeSubDomains, пользователи legacy-поддомена окажутся заблокированы. Правильно сначала перевести все поддомены на HTTPS, а затем постепенно довести HSTS основного домена до годового срока. Список поддоменов виден в отчёте SSL Labs.
HSTS и Комплаенс-основа для выхода на зарубежные рынки требования к защите передачи данных совпадают: HSTS — самое прямое техническое решение для шифрования персональных данных по GDPR.
Три. Смешанное содержимое: автоматическое обновление плюс ручная чистка
Смешанное содержимое — это ресурсы, загружаемые по протоколу http:// на HTTPS-странице. Оно делится на два типа: пассивное (изображения, видео, шрифты) браузер блокирует автоматически, но без ошибки; активное (<script>, <iframe>, fetch, XHR) сразу подсвечивает страницу красным, браузер отказывается его загружать, и функциональность ломается.
Исправление в два шага. Первый — добавить заголовок ответа Content-Security-Policy: upgrade-insecure-requests;, браузер сам заменит все запросы http:// на https://, это решает 80% проблем. Второй — прогнать страницу через панель Console в Chrome DevTools и вычистить оставшиеся жёстко прописанные http:// из кода и базы данных, особенно siteurl и home в таблице wp_options WordPress, а также старые данные вида <img src=”http://…”> в архивных статьях.
| Тип смешанного содержимого | Поведение браузера | Приоритет исправления | Способ исправления |
|---|---|---|---|
| http://<script>或<iframe> | Блокируется сразу, страница выдаёт ошибку | P0, исправлять немедленно | Заменить адрес источника на https или перейти на CDN |
| Запросы http:// XHR/fetch | Ошибка в консоли, функциональность не работает | P0, исправлять немедленно | В коде заменить на относительный протокол или https |
| http://<img> изображения | Некоторые браузеры обновляют автоматически | P1, исправить в течение недели | Подстраховка через upgrade-insecure-requests |
| http:// шрифты или фоновые изображения в CSS | Тихий сбой, стили пропадают | P1, исправить в течение недели | Заменить ссылки на https через CDN |
| Ссылки http:// в <a href> | Редирект на HTTP: без ошибок, но с утечкой | P2, чистить раз в месяц | Массовая замена в sitemap |
Самая частая проблема на WordPress — жёстко прописанные ссылки http:// на изображения в старых статьях. Не делайте массовую замену прямо в базе через SQL — сначала сделайте бэкап, а затем используйте Search Replace DB для безопасной замены с учётом сериализации, иначе повредите сериализованные данные PHP. Как сделать бэкап, см.Бэкап и восстановление сайта.
Очистка смешанного контента и Оптимизация Core Web Vitals работают в связке: заблокированные скрипты тормозят LCP, а отклонённые изображения вызывают CLS. После очистки смешанного контента эти два показателя обычно улучшаются сами.
Четыре. Чек-лист приёмки и ежемесячный аудит
Настройка HTTPS — это не разовая акция при запуске. Сертификаты истекают, добавляются поддомены, в старый контент снова попадают ссылки http. Нужна таблица ежемесячного аудита: запускайте её раз в месяц, это занимает 5–10 минут.
| Что проверить | Инструмент / метод | Критерий | Что делать, если проверка не пройдена |
|---|---|---|---|
| Оценка SSL Labs | ssllabs.com/ssltest | A или A+ | Настроить TLS, отключить устаревшие протоколы |
| Остаток срока действия сертификата | openssl s_client | ≥15 дней | Сразу запустить продление |
| Редирект HTTP на HTTPS | curl -I http://example.com | 301 на https | Добавить правила rewrite |
| Наличие заголовка HSTS | curl -I, проверить заголовки ответа | max-age≥86400 | Добавить настройку заголовка |
| Количество смешанного контента | Консоль Chrome DevTools | 0 | Найти и заменить жёстко прописанный http |
| Версия TLS | Отчёт SSL Labs | Только TLS 1.2/1.3 | Отключить TLS 1.0/1.1 |
Как автоматизировать аудит, см.Мониторинг сайта и оповещения в разделах о мониторинге истечения сертификатов и доступности. После взлома настройка HTTPS часто ломается, процесс очистки см.Очистка и повторная индексация сайта после взлома.
Контринтуитивное напоминание: не спешите отправлять домен в HSTS preload. Как только ваш домен попадёт во встроенный список preload в браузерах, для его удаления придётся проходить отдельную процедуру, и ещё несколько месяцев браузеры старых пользователей будут принудительно использовать HTTPS. Если вы всё ещё часто меняете поддомены и тестовые окружения, отложите preload минимум до полугода стабильной работы основного сайта.
FAQ: частые вопросы
Хватит ли бесплатного сертификата Let’s Encrypt или стоит купить платный OV?
Можно ли сразу поставить HSTS с max-age=31536000?
Как массово исправить смешанный контент, есть ли инструмент в один клик?
Как настроить автообновление сертификата и какие подводные камни самые опасные?
Влияет ли HTTPS на SEO и обязателен ли он для всего сайта?
Как настроить версии TLS, отключать ли TLS 1.0 и 1.1?
В заключение
Настройку HTTPS часто воспринимают как «поставил сертификат — и готово», хотя на деле это фундамент безопасности и SEO вашего сайта. Истёкший сертификат, отсутствие HSTS, остатки смешанного контента — каждая из этих трёх проблем заставляет браузер показать красное предупреждение. Покупатель видит его и закрывает страницу, а позиции в поиске проседают. Настроить один раз и проверять раз в месяц стоит копейки, а выигрывает весь сайт.
Три шага на практике: сначала закрываем вопрос с сертификатом — автоматическое продление через Let’s Encrypt и оценка A или выше в SSL Labs; затем по трём этапам поднимаем HSTS с 5 минут до года; и наконец сводим смешанный контент к нулю через upgrade-insecure-requests и ручную чистку. Только после этих трёх шагов HTTPS действительно настроен. Чек-лист для регулярного обслуживания — в Шесть задач на месяц в период обслуживания сайта, добавьте туда проверку HTTPS.
Запомните одну фразу: HTTPS — это не просто установленный сертификат. Автоматическое продление сертификата, постепенное усиление HSTS и обнуление смешанного контента — только когда пройдены все три уровня, это настоящий HTTPS. Не хватит одного — и красное предупреждение браузера само отгонит от вас покупателей.
