Раньше большая часть информации в интернете передавалась по HTTP-протоколу. HTTP — не самый безопасный протокол, так как при его использовании данные не защищены и мошенники могут получить к ним доступ или изменить их.
Чтобы злоумышленники не могли этого делать, разработали специальное расширение на основе SSL/TLS-протокола, добавили его к стандартному HTTP-протоколу и получили безопасный протокол HTTPS. Если вы вводите данные на сайте с HTTPS, то на пути от вашего браузера к серверу с сайтом они будут зашифрованы.
🔎 SSL/TLS хендшейк — это часть SSL/TLS-протокола, во время которой две взаимодействующие стороны обмениваются сообщениями, чтобы проверить друг друга и установить алгоритмы шифрования. Эти алгоритмы они используют для защищенного соединения и безопасной передачи информации.
Именно это «рукопожатие» является основой работы HTTPS-протокола.
👉Читайте также наши статьи:
- Что такое SSL-сертификат
- Нужен ли SSL-сертификат моему сайту
- Как работает SSL-сертификат
- Руководство по миграции с HTTP на HTTPS для WordPress
В чем разница между SSL handshake и TLS handshake
Если вы прочитаете несколько статей о хендшейке, вы заметите, что его называют и SSL хендшейком, и TLS хендшейком, и SSL/TLS хендшейком. Давайте разберемся, есть ли между этими терминами разница 👇
SSL, или Secure Sockets Layer, был исходным протоколом шифрования. Его разработали для HTTP-протокола, чтобы обезопасить передачу данных в интернете.
Затем SSL был усовершенствован и заменен на TLS или Transport Layer Security. SSL handshake теперь называется TLS handshake, хотя название «SSL» иногда все еще используется.
Когда происходит рукопожатие
TLS handshake случается всякий раз, когда вы переходите на веб-сайт, который работает по HTTPS-протоколу.
Рукопожатие также происходит, когда HTTPS-протокол используется для любых других коммуникаций, включая вызовы API и запросы DNS-over-HTTPS.
Что происходит во время рукопожатия
Рукопожатие можно представить как диалог клиента и сервера, в ходе которого они согласовывают, какую версию TLS-протокола и какие алгоритмы шифрования они будут использовать.
Клиент в этом контексте — компьютерное приложение, которое запускается на компьютере, смартфоне или другом устройстве и при необходимости подключается к серверу. Простой пример такого клиента — ваш браузер.
Во время рукопожатия клиент и сервер также обмениваются ключами и сертификатами, устанавливают безопасное соединение и начинают обмениваться данными.
Сам процесс хендшейка упрощенно можно разделить на три этапа: приветствие, обмен сертификатами и обмен ключами:
1️⃣ Приветствие: клиент отправляет сообщение серверу — ClientHello. В сообщении информация, которая нужна чтобы создать или восстановить TLS-сессию: наборы предпочитаемых методов шифрования, поддерживаемая версия SSL/TLS.
Сервер отвечает сообщением ServerHello. В ответе информация, которую запросил клиент: версия SSL/TLS, ID создаваемой сессии, выбранный метод шифрования.
2️⃣ Обмен сертификатами: после выбора метода общения клиента и сервера, сервер проходит аутентификацию, чтобы доказать клиенту, что он именно тот, за кого он себя выдаёт.
Аутентификация происходит с помощью SSL-сертификата, который сервер отправляет клиенту. Сертификат содержит информацию о домене, для которого он выпущен, публичный ключ, цифровую подпись, дату выдачи и срок действия сертификата.
Клиент проверяет сертификат через центр сертификации, который его выпустил. Сервер тоже может запросить сертификат клиента для его аутентификации.
3️⃣ Обмен ключами: обе стороны — клиент и сервер создают ключ для симметричного шифрования — master key.
Клиент генерирует pre-master secret key, который будет использоваться для вычисления master key. Затем он шифрует его публичным ключом сервера. Клиент берет публичный ключ из SSL-сертификата. Шифрование происходит с помощью алгоритма, выбранного на шаге приветствия.
После этого клиент отправляет pre-master secret key серверу. Сервер дешифрует pre-master secret key с помощью своего приватного ключа и вычисляет master key на своей стороне. Клиент и сервер должны прийти к одинаковому значению master key.
Если клиенту и серверу удается это сделать, между ними устанавливается безопасное соединение. С этого момента данные, которые они передают друг другу, будут зашифрованы.
Сохраняйте статью в закладки и делитесь с друзьями!