HTTPS (HyperText Transfer Protocol Secure) - это защищенная версия протокола HTTP, предназначенная для безопасной передачи данных между клиентом (браузером) и веб-сервером.
По сути: HTTPS = HTTP + TLS
Ранее использовался протокол SSL (Secure Sockets Layer), однако сегодня он считается устаревшим. Современные соединения используют именно TLS (Transport Layer Security).
Поэтому часто можно встретить другое название HTTPS: HTTP over TLS. Это означает, что обычные HTTP-запросы передаются не напрямую по сети, а внутри защищенного TLS-соединения.
Перед тем как разобраться с HTTPS, необходимо вспомнить принцип работы HTTP.
HTTP - это протокол прикладного уровня, который позволяет браузеру обмениваться данными с сервером.
Например:
GET /index.html HTTP/1.1 Host: example.com
Сервер отвечает:
HTTP/1.1 200 OK <html>...</html>
Главная проблема HTTP заключается в том, что все данные передаются в открытом виде. Любой, кто сможет перехватить сетевой трафик, увидит:
Именно поэтому HTTP сегодня практически не используется для современных веб-приложений.
TLS (Transport Layer Security) - это криптографический протокол, который обеспечивает безопасную передачу данных по сети.
Он решает сразу три задачи:
Именно TLS делает HTTPS безопасным.
HTTP over TLS
Когда говорят HTTP over TLS, имеют в виду следующую схему:
Браузер HTTP-запрос TLS TCP IP
Без TLS схема выглядит проще:
HTTP TCP IP
При использовании HTTPS между HTTP и TCP появляется дополнительный уровень защиты - TLS. Он полностью шифрует весь HTTP-трафик. Даже если злоумышленник перехватит пакеты, он увидит лишь набор случайных байтов.
Как работает HTTPS
- Шаг 1. Пользователь открывает сайт
Например: https://example.com
Браузер понимает, что необходимо установить защищенное соединение.
По умолчанию используется порт: 443
Для обычного HTTP используется порт: 80
- Шаг 2. TLS Handshake
Перед передачей HTTP-запросов происходит специальная процедура - TLS Handshake. Стороны договариваются:
Без успешного TLS Handshake соединение невозможно.
- Шаг 3. Сервер отправляет сертификат
Сервер отправляет браузеру свой цифровой сертификат.
В сертификате содержится:
Например:
example.com Public Key Let's Encrypt Expires: 2027
- Шаг 4. Проверка сертификата
Браузер проверяет:
Если проверка проходит успешно, браузер показывает значок замка. Если нет - пользователь увидит предупреждение.
- Шаг 5. Обмен ключами
После проверки сертификата начинается обмен криптографическими ключами.
Обычно используется алгоритм ECDHE (Elliptic Curve Diffie-Hellman Ephemeral).
Он позволяет сторонам независимо вычислить общий секретный ключ, не передавая его по сети. Этот ключ используется для дальнейшего симметричного шифрования данных.
- Шаг 6. Передача HTTP
После завершения TLS Handshake начинается обычная работа HTTP.
Например:
GET /profile POST /login PUT /users DELETE /posts
Но теперь каждый запрос автоматически шифруется TLS. То же самое относится и к ответам сервера.
Какие задачи решает HTTPS
- Конфиденциальность
Никто не сможет прочитать передаваемые данные. Даже интернет-провайдер не увидит содержимое запросов.
- Целостность
TLS гарантирует, что данные не были изменены. Если злоумышленник попробует изменить пакет, проверка целостности завершится ошибкой.
- Аутентификация
Браузер убеждается, что соединение установлено именно с настоящим сервером. Это защищает пользователя от поддельных сайтов.
Почему HTTPS быстрее, чем кажется
Раньше считалось, что HTTPS сильно замедляет работу сайта. Сегодня это уже не так.
Современные версии TLS (TLS 1.3), аппаратное ускорение AES, HTTP/2, HTTP/3 (QUIC) делают защищенное соединение практически таким же быстрым, как обычный HTTP.
Во многих случаях HTTPS оказывается даже быстрее благодаря оптимизациям современных протоколов.
Source: Orkhan Alishov's notes