
SSL/TLS и HTTPS — это фундамент безопасности современного веба. Разберём, что это такое, как работает «под капотом», какие бывают сертификаты и что реально нужно знать разработчику.
В чём разница между SSL и TLS
Исторически первым был SSL (Secure Sockets Layer), но в нём нашли серьёзные уязвимости. Сейчас везде используют TLS (Transport Layer Security). При этом в обиходе по привычке говорят «SSL‑сертификат» и «SSL‑ошибка», хотя технически речь почти всегда про TLS.
HTTPS = HTTP + TLS. То есть это обычный HTTP, но с шифрованием и проверкой подлинности сервера.
Как работает HTTPS: простыми словами
Представь, что ты отправляешь письмо в запечатанном конверте, а у получателя есть ключ, чтобы его открыть. Примерно так же устроен HTTPS, только вместо конверта — криптография.
Основные задачи TLS
- Шифрование. Трафик между браузером и сервером нельзя прочитать «по дороге». Даже если кто-то перехватит пакеты, он увидит только бессмысленный набор байтов.
- Целостность. Если злоумышленник попытается подменить данные (например, вставить вредоносный JS в страницу), TLS это обнаружит: подпись не сойдётся, и соединение разорвётся.
- Аутентификация. Браузер проверяет, что он действительно соединился с тем сайтом, адрес которого ты ввёл, а не с поддельным сервером.
Что такое SSL/TLS‑сертификат
Сертификат — это цифровой документ, который подтверждает: «этот домен принадлежит именно этому владельцу». В нём хранится:
- Доменное имя (или список доменов).
- Публичный ключ.
- Данные владельца и срок действия.
- Цифровая подпись удостоверяющего центра (CA).
Когда ты заходишь на сайт, браузер проверяет:
- срок действия сертификата,
- цепочку доверия (кто подписал сертификат),
- соответствие домена в сертификате тому, что ты ввёл в адресной строке.
Если что-то не совпадает — браузер показывает предупреждение.
Типы сертификатов
| Тип | Для чего подходит | Уровень проверки | Пример использования |
|---|---|---|---|
| DV (Domain Validated) | Подтверждает только владение доменом. | Минимальная: проверка по email, DNS‑записи или HTTP‑файлу. | Личные сайты, блоги, небольшие проекты. |
| OV (Organization Validated) | Подтверждает и домен, и организацию. | Средняя: проверка юрлица, контактов. | Корпоративные сайты, внутренние порталы. |
| EV (Extended Validation) | Максимальная проверка организации. | Строгая: документы, звонки, проверка адреса. | Банки, платёжные системы (сейчас встречается реже). |
Для большинства проектов достаточно DV‑сертификата. Именно такие бесплатно выдаёт Let’s Encrypt.
Как происходит установка соединения (TLS handshake)
Это короткий диалог браузера и сервера при каждом HTTPS‑соединении:
- ClientHello. Браузер говорит: «Я хочу TLS, вот мои поддерживаемые версии и шифры».
- ServerHello. Сервер отвечает: «Ок, берём такой‑то шифр, вот мой сертификат с публичным ключом».
- Проверка сертификата. Браузер сверяет подпись, срок, домен и цепочку.
- Обмен ключами. С помощью публичного ключа из сертификата стороны договариваются о временном сеансовом ключе.
- Шифрованный обмен. Весь дальнейший трафик шифруется этим сеансовым ключом.
Важно: сам пароль или куки по сети не передаются «как есть». Они попадают в уже зашифрованный канал.
Шифры и безопасность
В 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 в продакшене.
- Следи за сроками действия сертификатов: если сертификат истёк, сайт станет недоступен для большинства пользователей.
- Не храни приватные ключи в коде или публичных репозиториях.
- При тестировании используй локальные сертификаты или временные домены.
