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 заключается в том, что все данные передаются в открытом виде. Любой, кто сможет перехватить сетевой трафик, увидит:

  • логины;
  • пароли;
  • банковские карты;
  • cookies;
  • содержимое сообщений;
  • персональные данные.

Именно поэтому 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