Как работает HTTPS: TLS-рукопожатие, сертификаты и ключи
Основы3 минРедакция Innovialabs
Коротко
HTTPS — это обычный HTTP внутри TLS-туннеля: при рукопожатии сервер подтверждает свою подлинность сертификатом, стороны договариваются о новых сессионных ключах, и дальше весь трафик шифруется и защищается от подмены.
Коротко
HTTPS = HTTP + TLS. Прежде чем браузер отправит хоть один байт запроса, он проводит с сервером короткие переговоры — TLS-рукопожатие (handshake). У него три задачи:
- Аутентификация — сервер доказывает сертификатом, что домен действительно его.
- Обмен ключами — браузер и сервер получают общий секрет, который невозможно вычислить, наблюдая за сетью.
- Сессионные ключи — из этого секрета обе стороны выводят симметричные ключи, которыми шифруется и защищается каждый запрос и ответ.
После этого обычный HTTP идёт уже внутри зашифрованного канала.
Рукопожатие по шагам (TLS 1.3)
TLS 1.3 — актуальная версия протокола, ей нужен всего один круг «запрос-ответ» до начала передачи данных.
- ClientHello. Браузер сообщает поддерживаемые версии TLS и наборы шифров, случайное число, нужный домен (поле SNI) и key share — свою половину обмена ключами по Диффи-Хеллману.
- ServerHello. Сервер выбирает версию и шифр и присылает свою половину. С этого момента обе стороны могут вычислить одинаковый общий секрет, и всё дальнейшее уже шифруется.
- Certificate и CertificateVerify. Сервер отправляет цепочку сертификатов и подписывает историю рукопожатия своим закрытым ключом. Так он доказывает, что владеет ключом от сертификата.
- Finished. Стороны обмениваются контрольной суммой всего рукопожатия. Если кто-то изменил сообщение по дороге, суммы не совпадут, и соединение будет разорвано.
- Данные приложения. Браузер отправляет сам HTTP-запрос, зашифрованный сессионными ключами.
Старый TLS 1.2 устроен по той же логике, но требует двух кругов и допускает более слабые варианты — поэтому современные настройки отдают предпочтение 1.3.
Как проверяется цепочка сертификатов
Сертификат связывает доменное имя с открытым ключом и подписан удостоверяющим центром (CA). Браузер не доверяет сертификату сервера напрямую, а проходит по цепочке:
| Уровень | Где находится | Что проверяет браузер |
|---|---|---|
| Конечный сертификат | На вашем сервере | Домен совпадает с Subject Alternative Name, срок действия не истёк |
| Промежуточный CA | Сервер отдаёт его вместе с конечным | Его подпись на конечном сертификате верна |
| Корневой CA | Встроен в хранилище доверия ОС или браузера | Его подпись на промежуточном верна |
Если любое звено отсутствует или неверно — сертификат просрочен, домен не тот, промежуточный не отправлен, корень неизвестен — браузер показывает предупреждение на весь экран вместо сайта.
Зачем два вида ключей
- Асимметричные ключи (открытый ключ в сертификате и закрытый на сервере) медленные и используются только для подтверждения подлинности.
- Эфемерные ключи Диффи-Хеллмана создаются заново для каждого соединения и затем уничтожаются. Это даёт forward secrecy: даже если закрытый ключ сервера утечёт позже, записанный старый трафик расшифровать не получится.
- Симметричные сессионные ключи (например, AES-GCM или ChaCha20-Poly1305) быстрые и шифруют основной поток. К каждой порции данных они добавляют метку подлинности, поэтому подмена обнаруживается.
Что HTTPS защищает, а что нет
Защищено:
- Содержимое страниц, формы, cookies, заголовки, а также путь и параметры URL.
- Целостность: никто в сети не может незаметно вставить рекламу или скрипт и подменить скачиваемый файл.
- Подлинность сервера: вы общаетесь с владельцем действующего сертификата на этот домен.
Не защищено:
- Доменное имя обычно видно через SNI и DNS-запросы, IP-адреса видны всегда.
- Объём и время передачи данных всё ещё могут выдавать закономерности.
- HTTPS ничего не говорит о добросовестности сайта: фишинговые сайты тоже получают сертификаты.
- Он не защищает данные на сервере или на заражённом устройстве — только в пути.
Частые ошибки
- Сервер отдаёт конечный сертификат без промежуточного: одни браузеры справляются, другие нет.
- Сертификаты забывают продлевать — продление нужно автоматизировать.
- На HTTPS-странице подключены HTTP-ресурсы (картинки, скрипты).
- Старые версии протокола оставлены включёнными «для совместимости».