Перейти к содержанию
Innovialabs

Как работает HTTPS: TLS-рукопожатие, сертификаты и ключи

Основы3 мин

Коротко

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

Коротко

HTTPS = HTTP + TLS. Прежде чем браузер отправит хоть один байт запроса, он проводит с сервером короткие переговоры — TLS-рукопожатие (handshake). У него три задачи:

  1. Аутентификация — сервер доказывает сертификатом, что домен действительно его.
  2. Обмен ключами — браузер и сервер получают общий секрет, который невозможно вычислить, наблюдая за сетью.
  3. Сессионные ключи — из этого секрета обе стороны выводят симметричные ключи, которыми шифруется и защищается каждый запрос и ответ.

После этого обычный HTTP идёт уже внутри зашифрованного канала.

Рукопожатие по шагам (TLS 1.3)

TLS 1.3 — актуальная версия протокола, ей нужен всего один круг «запрос-ответ» до начала передачи данных.

  1. ClientHello. Браузер сообщает поддерживаемые версии TLS и наборы шифров, случайное число, нужный домен (поле SNI) и key share — свою половину обмена ключами по Диффи-Хеллману.
  2. ServerHello. Сервер выбирает версию и шифр и присылает свою половину. С этого момента обе стороны могут вычислить одинаковый общий секрет, и всё дальнейшее уже шифруется.
  3. Certificate и CertificateVerify. Сервер отправляет цепочку сертификатов и подписывает историю рукопожатия своим закрытым ключом. Так он доказывает, что владеет ключом от сертификата.
  4. Finished. Стороны обмениваются контрольной суммой всего рукопожатия. Если кто-то изменил сообщение по дороге, суммы не совпадут, и соединение будет разорвано.
  5. Данные приложения. Браузер отправляет сам 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-ресурсы (картинки, скрипты).
  • Старые версии протокола оставлены включёнными «для совместимости».

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

Он означает, что соединение зашифровано и у сервера есть действующий сертификат на этот домен. Честность владельца сайта он не гарантирует, поэтому доменное имя всё равно стоит проверять внимательно.

Поможем с этим

Если хотите не разбираться самим, а получить результат — этим мы занимаемся каждый день.

Обсудить проект

Читайте также

Есть идея или задача? Расскажите нам

Ответим в течение рабочего дня и предложим решение. Консультация бесплатная.