This article is available in Russian only. English translation is not yet available.
SSL и сайты

Что такое HTTPS и как работает защищённое соединение

HTTPS — это HTTP поверх TLS. Разбираем рукопожатие TLS, роль сертификатов, HSTS и отличие от HTTP.

HTTPS (HyperText Transfer Protocol Secure) — это протокол передачи данных, в котором HTTP работает поверх TLS (Transport Layer Security). TLS шифрует соединение между браузером и сервером, чтобы третья сторона не могла прочитать или подменить данные.

Без HTTPS пароли, cookies и личные данные передаются в открытом виде. С HTTPS те же данные зашифрованы, а сертификат подтверждает подлинность сервера.

Как работает TLS

Когда браузер подключается к https://example.com, происходит TLS-рукопожатие:

  1. ClientHello — браузер отправляет список поддерживаемых алгоритмов шифрования и случайное число.
  2. ServerHello — сервер выбирает алгоритмы, отправляет сертификат и случайное число.
  3. Проверка сертификата — браузер проверяет, что сертификат выдан доверенным центром (CA), не истёк и соответствует домену.
  4. Обмен ключами — браузер и сервер вычисляют общий ключ сессии, не передавая его по сети.
  5. Шифрование — все последующие данные шифруются этим ключом.

В TLS 1.3 рукопожатие оптимизировано до одной передачи в каждую сторону, что ускоряет установку соединения.

Проверить сертификат домена можно через инструмент проверки SSL.

Версии TLS

Протокол TLS развивался поэтапно: SSL 3.0 (устарел и небезопасен), TLS 1.0 и 1.1 (устарели), TLS 1.2 (широко используется), TLS 1.3 (современный стандарт). Основные браузеры и серверы поддерживают TLS 1.2 и 1.3. Версии ниже 1.2 отключены в большинстве современных браузеров из-за известных уязвимостей.

TLS 1.3 отличается от 1.2 не только быстрее рукопожатием, но и обязательной совершенной прямой секретностью (forward secrecy): компрометация долговременного ключа не раскрывает ранее перехваченный трафик. В TLS 1.2 прямая секретность возможна, но зависит от выбранных шифров.

Проверить, какие версии TLS поддерживает сервер, можно через openssl:

openssl s_client -connect example.com:443 -tls1_2 </dev/null 2>/dev/null | grep Protocol
openssl s_client -connect example.com:443 -tls1_3 </dev/null 2>/dev/null | grep Protocol

Если сервер не поддерживает TLS 1.2 или 1.3, часть клиентов не сможет подключиться. Включайте TLS 1.3 и оставляйте 1.2 для совместимости, пока не убедитесь, что все клиенты обновились.

Роль сертификата

Сертификат — это документ, который связывает доменное имя с публичным ключом сервера. Он подписан центром сертификации (CA), которому доверяет браузер.

Сертификат содержит:

  • Имя домена (Common Name) и дополнительные имена (SAN).
  • Имя издателя (CA).
  • Срок действия (valid from / valid until).
  • Публичный ключ.

Без действительного сертификата браузер показывает предупреждение «небезопасное соединение». Проверить срок и имена сертификата можно через проверку SSL.

HSTS: защита от понижения

HSTS (HTTP Strict Transport Security) — заголовок, который заставляет браузер использовать HTTPS в течение заданного времени:

Strict-Transport-Security: max-age=31536000; includeSubDomains
  • max-age=31536000 — использовать HTTPS в течение года.
  • includeSubDomains — применять ко всем поддоменам.

Без HSTS злоумышленник может перенаправить пользователя на http:// версию сайта и перехватить данные. Проверить наличие HSTS и других заголовков безопасности можно через анализатор заголовков безопасности.

HTTP vs HTTPS

Свойство HTTP HTTPS
Шифрование Нет TLS
Сертификат Не требуется Нужен от доверенного CA
Порт по умолчанию 80 443
HSTS Не работает Работает
Индексация Понижается в поиске Предпочтителен

Типичные ошибки

  • Сертификат истёк. Браузер показывает предупреждение. Проверьте срок заранее через проверку SSL.
  • Нет HSTS. Пользователь может быть перенаправлен на HTTP. Добавьте Strict-Transport-Security заголовок.
  • Mixed content. Страница загружается по HTTPS, но ресурсы (картинки, скрипты) — по HTTP. Браузер блокирует их.
  • Сертификат не покрывает www. Если SAN не включает www.example.com, пользователи увидят ошибку при доступе через www.

Практический пример

Для включения HTTPS на сервере с доменом example.com:

  1. Получите сертификат у Let's Encrypt (бесплатно) или вашего регистратора.
  2. Настройте веб-сервер (Nginx/Apache) для отдачи HTTPS на порту 443.
  3. Настройте редирект с HTTP (порт 80) на HTTPS.
  4. Добавьте заголовок HSTS: Strict-Transport-Security: max-age=31536000; includeSubDomains.
  5. Проверьте сертификат через проверку SSL.
  6. Проверьте заголовки безопасности через анализатор.

После настройки убедитесь, что все ресурсы на странице загружаются по HTTPS, иначе браузер заблокирует mixed content.

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

Чем HTTPS отличается от HTTP?

HTTPS — это HTTP поверх TLS. TLS шифрует данные между браузером и сервером, а сертификат подтверждает, что сервер принадлежит тому, за кого себя выдаёт. HTTP передаёт данные открыто.

Что такое TLS-рукопожатие?

TLS-рукопожатие — это процесс, при котором браузер и сервер согласовывают алгоритмы шифрования, проверяют сертификат и создают общий ключ. В TLS 1.3 рукопожатие требует одной сетевой передачи в каждую сторону.

Достаточно ли HTTPS для безопасности сайта?

HTTPS защищает соединение, но не защищает от уязвимостей в коде, слабых паролей или отсутствия заголовков безопасности. Проверьте CSP, HSTS и другие заголовки через анализатор безопасности.

Check it in practice

Related terms

Sources

  1. RFC 9110: HTTP Semantics
  2. RFC 8446: TLS 1.3
  3. RFC 6797: HTTP Strict Transport Security (HSTS)

Как проверить SSL-сертификат сайта

Проверка сертификата не ограничивается датой окончания: важны имя узла, цепочка до доверенного центра и фактическая конфигурация TLS-сервера.