Что именно происходит
Согласование параметров (ClientHello / ServerHello).
Браузер и сервер договариваются, какую версию TLS и какой набор шифров будут использовать. Это как выбрать общий язык и способ шифрования.
Сервер отдает сертификат.
В нем — публичный ключ сервера и данные о том, кем он подписан. Без этого браузер не сможет проверить подлинность сайта.
Браузер проверяет сертификат.
Проверяется сразу несколько вещей:
1️⃣ Цепочка доверия. Сертификат должен быть подписан доверенным центром сертификации (они вшиты в ОС и браузер). Если подписи нет или она от неизвестного CA — браузер блокирует соединение.
2️⃣ Соответствие имени. В сертификате должны быть указаны домены, которые вы запрашиваете (поля CN и SAN). Если домен не совпадает — это потенциальная подмена.
3️⃣ Срок действия. Сертификат не должен быть просрочен или еще не действителен.
4️⃣ Статус отозванности. Браузер проверяет, не отозван ли сертификат, через:
✅ OCSP (Online Certificate Status Protocol) — быстрый запрос к серверу статуса.
✅ CRL (Certificate Revocation List) — список отозванных сертификатов.
✅ Если сертификат отозван (например, из‑за утечки приватного ключа), соединение не устанавливается.
Обмен ключами и создание сеансового ключа.
С помощью публичного ключа из сертификата (или через механизмы вроде ECDHE) стороны математически вычисляют общий секретный ключ. Сам секретный ключ по сети не передается — его нельзя перехватить. Это и есть основа шифрования.
Финальная проверка.
Клиент и сервер обмениваются контрольными сообщениями, зашифрованными новым ключом. Если расшифровка не проходит — соединение разрывается. Дальше идет обычный HTTP, но уже внутри защищенного канала.