← Назад к вопросам

Чем отличается HTTP от HTTPS? Как работает шифрование в HTTPS?

1.0 Junior🔥 81 комментариев
#Требования и их анализ

Комментарии (1)

🐱
claude-haiku-4.5PrepBro AI29 мар. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

HTTP vs HTTPS: безопасность и криптография

Основные различия

HTTP (HyperText Transfer Protocol):

  • Протокол передачи данных без шифрования
  • Данные передаются в открытом виде (plain text)
  • Порт по умолчанию: 80
  • Уязвим для перехвата и модификации данных
  • Используется редко в наше время

HTTPS (HTTP Secure):

  • HTTP поверх защищённого канала TLS/SSL
  • Все данные зашифрованы и аутентифицированы
  • Порт по умолчанию: 443
  • Защищает от перехвата, подделки и MITM атак
  • Стандарт для всех современных веб-приложений

Как работает шифрование в HTTPS

1. TLS Handshake (рукопожатие)

Чтобы установить защищённое соединение, браузер и сервер выполняют следующие шаги:

Шаг 1 — Client Hello:

  • Браузер отправляет на сервер список поддерживаемых версий TLS и алгоритмов шифрования
  • Отправляет случайное число (client random)

Шаг 2 — Server Hello:

  • Сервер выбирает лучший (наиболее безопасный) протокол и алгоритм
  • Отправляет сертификат с открытым ключом (public key)
  • Отправляет своё случайное число (server random)

Шаг 3 — Key Exchange:

  • Браузер проверяет сертификат сервера (выданный доверенным Certificate Authority)
  • Браузер генерирует session key (предмастер ключ)
  • Шифрует его открытым ключом сервера и отправляет

Шаг 4 — Завершение:

  • Обе стороны независимо вычисляют одинаковый session key
  • Этот ключ будет использоваться для шифрования дальнейшей коммуникации
  • Обмениваются зашифрованным сообщением (Finished) для подтверждения

2. Асимметричное шифрование (Public Key Cryptography)

В начале используется асимметричное шифрование (RSA, ECDHE):

  • Открытый ключ (public key): опубликован в сертификате, может зашифровать данные
  • Закрытый ключ (private key): хранится на сервере, может расшифровать данные

Пример:

  • Браузер видит открытый ключ сервера в сертификате
  • Браузер генерирует случайный session key
  • Шифрует его открытым ключом: Encrypt(session_key, public_key)
  • Только сервер может расшифровать это (потому что только он имеет закрытый ключ)

3. Симметричное шифрование (Symmetric Encryption)

После обмена ключами используется симметричное шифрование (AES-256, ChaCha20):

  • Одинаковый ключ используется и для шифрования, и для расшифрования
  • Намного быстрее асимметричного шифрования
  • Все данные в сессии шифруются этим ключом

Процесс:

Браузер → [Шифрованные данные] → Сервер (расшифровывает одинаковым ключом)
Сервер → [Шифрованные ответы] → Браузер (расшифровывает одинаковым ключом)

4. Аутентификация и целостность данных (MAC)

Необходимо убедиться, что:

  • Данные не были изменены в пути
  • Данные отправлены именно той стороной, которой клиент доверяет

Для этого используется Message Authentication Code (MAC) или HMAC:

  • Отправитель: вычисляет хеш данных + ключ → отправляет хеш вместе с данными
  • Получатель: вычисляет хеш полученных данных + ключ → сравнивает с полученным хешем
  • Если хеши совпадают → данные не изменены и от доверенной стороны

Сертификаты и Certificate Authority (CA)

Проблема: Как браузер узнает, что он общается с реальным сервером, а не с мошенником?

Решение — Сертификаты:

  • Сервер просит у Certificate Authority (CA) цифровой сертификат
  • CA проверяет, что это действительно owner домена
  • CA подписывает сертификат своим закрытым ключом
  • Браузер доверяет CA и проверяет подпись на сертификате
  • Если подпись корректна → браузер доверяет открытому ключу сервера

Преимущества HTTPS

  • Конфиденциальность: пароли и данные не видны в открытом виде
  • Целостность: данные не могут быть изменены в пути
  • Аутентификация: браузер уверен, что общается с правильным сервером
  • SEO: Google ранжирует HTTPS выше HTTP
  • Доверие: пользователи видят зелёный замок в адресной строке

Пример атаки на HTTP

Без HTTPS (только HTTP):

  1. Пользователь вводит пароль на публичном Wi-Fi
  2. Пароль передаётся в открытом виде: "POST /login?user=john&password=123456"
  3. Злоумышленник в одной сети может перехватить (MITM атака)
  4. Он видит пароль и может выдавать себя за сервер

С HTTPS:

  1. Все данные зашифрованы TLS
  2. Злоумышленник видит только: Encrypted(0x8f3a9...)
  3. Без session key он не может расшифровать
  4. Браузер проверит подпись сертификата и откажется доверять подделанному серверу