SSL и HTTPS

SSL/TLS и HTTPS — это фундамент безопасности современного веба. Разберём, что это такое, как работает «под капотом», какие бывают сертификаты и что реально нужно знать разработчику.


В чём разница между SSL и TLS

Исторически первым был SSL (Secure Sockets Layer), но в нём нашли серьёзные уязвимости. Сейчас везде используют TLS (Transport Layer Security). При этом в обиходе по привычке говорят «SSL‑сертификат» и «SSL‑ошибка», хотя технически речь почти всегда про TLS.

HTTPS = HTTP + TLS. То есть это обычный HTTP, но с шифрованием и проверкой подлинности сервера.


Как работает HTTPS: простыми словами

Представь, что ты отправляешь письмо в запечатанном конверте, а у получателя есть ключ, чтобы его открыть. Примерно так же устроен HTTPS, только вместо конверта — криптография.

Основные задачи TLS

  1. Шифрование. Трафик между браузером и сервером нельзя прочитать «по дороге». Даже если кто-то перехватит пакеты, он увидит только бессмысленный набор байтов.
  2. Целостность. Если злоумышленник попытается подменить данные (например, вставить вредоносный JS в страницу), TLS это обнаружит: подпись не сойдётся, и соединение разорвётся.
  3. Аутентификация. Браузер проверяет, что он действительно соединился с тем сайтом, адрес которого ты ввёл, а не с поддельным сервером.

Что такое SSL/TLS‑сертификат

Сертификат — это цифровой документ, который подтверждает: «этот домен принадлежит именно этому владельцу». В нём хранится:

  • Доменное имя (или список доменов).
  • Публичный ключ.
  • Данные владельца и срок действия.
  • Цифровая подпись удостоверяющего центра (CA).

Когда ты заходишь на сайт, браузер проверяет:

  • срок действия сертификата,
  • цепочку доверия (кто подписал сертификат),
  • соответствие домена в сертификате тому, что ты ввёл в адресной строке.

Если что-то не совпадает — браузер показывает предупреждение.


Типы сертификатов

Тип Для чего подходит Уровень проверки Пример использования
DV (Domain Validated) Подтверждает только владение доменом. Минимальная: проверка по email, DNS‑записи или HTTP‑файлу. Личные сайты, блоги, небольшие проекты.
OV (Organization Validated) Подтверждает и домен, и организацию. Средняя: проверка юрлица, контактов. Корпоративные сайты, внутренние порталы.
EV (Extended Validation) Максимальная проверка организации. Строгая: документы, звонки, проверка адреса. Банки, платёжные системы (сейчас встречается реже).

Для большинства проектов достаточно DV‑сертификата. Именно такие бесплатно выдаёт Let’s Encrypt.


Как происходит установка соединения (TLS handshake)

Это короткий диалог браузера и сервера при каждом HTTPS‑соединении:

  1. ClientHello. Браузер говорит: «Я хочу TLS, вот мои поддерживаемые версии и шифры».
  2. ServerHello. Сервер отвечает: «Ок, берём такой‑то шифр, вот мой сертификат с публичным ключом».
  3. Проверка сертификата. Браузер сверяет подпись, срок, домен и цепочку.
  4. Обмен ключами. С помощью публичного ключа из сертификата стороны договариваются о временном сеансовом ключе.
  5. Шифрованный обмен. Весь дальнейший трафик шифруется этим сеансовым ключом.

Важно: сам пароль или куки по сети не передаются «как есть». Они попадают в уже зашифрованный канал.


Шифры и безопасность

В TLS используется гибридная схема:

  • Асимметричная криптография (RSA, ECDSA) — только для рукопожатия и обмена ключами. Она медленнее, но позволяет безопасно договориться о секрете.
  • Симметричная криптография (AES, ChaCha20) — для шифрования основного трафика. Она быстрая и эффективная.

Современные серверы отключают старые и небезопасные протоколы (SSL 3.0, TLS 1.0, 1.1) и оставляют TLS 1.2/1.3 с современными шифрами.


Где и как получают сертификаты

  • Let’s Encrypt. Бесплатный DV‑сертификат на 90 дней. Автоматизация через Certbot, ACME‑клиенты, панели хостинга. Самый популярный вариант.
  • Коммерческие центры (DigiCert, Sectigo, GlobalSign и др.). Платные сертификаты, часто с дополнительными услугами (поддержка, гарантии).
  • Внутренние центры (для корпоративных сетей). Используются для внутренних порталов, где внешний браузерный trust не нужен.

Практические нюансы для разработчика

HSTS (HTTP Strict Transport Security)

Заголовок Strict-Transport-Security говорит браузеру: «Всегда используй HTTPS для этого домена». Это защищает от атак, где злоумышленник пытается принудительно отправить пользователя на HTTP.

Пример (Nginx):

add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;

Редирект HTTP → HTTPS

На уровне веб‑сервера нужно перенаправлять все HTTP‑запросы на HTTPS. Это снижает риск того, что пользователь останется на незащищённой версии.

Mixed Content

Если сайт на HTTPS, а картинки, скрипты или стили грузятся по HTTP — браузер пометит страницу как «небезопасную». Нужно либо перевести все ресурсы на HTTPS, либо убрать HTTP‑ссылки.

Куки и флаг Secure

Для HTTPS обязательно ставить флаг Secure у куки: она будет отправляться только по зашифрованному соединению. Это критично для сессий и токенов.


Частые ошибки и мифы

  • «SSL только для платежей». Нет: любая форма, логин, комментарий, загрузка файла — это пользовательские данные. HTTPS нужен везде.
  • «Сертификат = полная безопасность». Сертификат защищает только передачу данных. Он не спасает от уязвимостей в коде, SQL‑инъекций, XSS и т. п.
  • «Один сертификат на все поддомены». Для этого нужен wildcard‑сертификат (например, *.example.com). Обычный сертификат покрывает только конкретный домен.

Что важно помнить при разработке

  • Всегда проверяй заголовки и настройки TLS в продакшене.
  • Следи за сроками действия сертификатов: если сертификат истёк, сайт станет недоступен для большинства пользователей.
  • Не храни приватные ключи в коде или публичных репозиториях.
  • При тестировании используй локальные сертификаты или временные домены.

Добавить комментарий