Почему HTTP небезопасен
Почему HTTP небезопасен
Мы разобрали HTTP подробно: запросы, ответы, заголовки, кэширование. Но у HTTP есть фундаментальная проблема — он передаёт данные открытым текстом. Любой, кто имеет доступ к сети между клиентом и сервером, может читать трафик. В этом уроке разберём, что это значит на практике и почему HTTPS стал не опцией, а стандартом.
HTTP = открытый текст
HTTP-сообщения — это обычный читаемый текст. Запрос, который отправляет браузер при вводе пароля на сайте без HTTPS, выглядит так:
POST /login HTTP/1.1
Host: bank.example.com
Content-Type: application/x-www-form-urlencoded
username=ivan&password=secret123
Каждый участник цепочки между тобой и сервером видит логин и пароль в чистом виде. Это не ошибка протокола — HTTP проектировался в 1991 году, когда интернет был академической сетью с доверием между участниками.
Кто может прочитать трафик
Цепочка передачи данных через интернет длинная. Пакет проходит через твой роутер, оборудование провайдера, магистральных операторов, и на каждом участке данные можно перехватить:
- Публичный Wi-Fi (кафе, аэропорт). В открытых сетях трафик виден всем в той же сети. Владелец точки доступа или сосед за соседним столиком с Wireshark читает твои запросы. Использовать HTTP в публичном Wi-Fi — всё равно что кричать пароль через всю кофейню.
- Провайдер. Твой интернет-провайдер технически может видеть весь HTTP-трафик. В некоторых странах провайдеры обязаны собирать метаданные или даже содержимое запросов.
- Злоумышленник в сети. ARP-спуфинг позволяет атакующему в локальной сети притвориться роутером и перехватывать весь трафик жертвы. Простая атака, работающая на HTTP.
Man-in-the-Middle (MITM)
Самая опасная атака на HTTP — Man-in-the-Middle (человек посередине). Атакующий встраивается в канал связи и не просто читает данные, но и может изменять их:
Клиент → [Атакующий] → Сервер
↑
Видит, изменяет, вставляет
На HTTP атакующий может:
- Украсть пароли и cookies сессии.
- Подменить ответ сервера: вместо запрошенной страницы вставить вредоносный скрипт.
- Перенаправить пользователя на поддельный сайт.
Без HTTPS клиент никак не проверяет, что общается с настоящим сервером. TCP-соединение гарантирует доставку пакетов по верному IP, но не проверяет, что IP действительно принадлежит банку, а не атакующему.
Три свойства защищённого соединения
HTTPS добавляет к HTTP три критических свойства, которые вместе называют CIA-триадой безопасности (Confidentiality, Integrity, Authenticity):
- Конфиденциальность (Confidentiality). Данные зашифрованы. Даже если пакеты перехвачены, прочитать их нельзя. Провайдер видит только IP-адреса и порты, но не содержимое запросов и ответов.
- Целостность (Integrity). Данные нельзя незаметно изменить в пути. HTTPS гарантирует, что ответ пришёл ровно в том виде, в котором сервер его отправил.
- Аутентичность (Authenticity). Клиент уверен, что общается с настоящим сервером. Сертификат, подписанный доверенным центром сертификации, подтверждает, что
bank.example.comдействительно принадлежит банку, а не атакующему.
HTTPS = HTTP + TLS
HTTPS — это не отдельный протокол, а HTTP, работающий поверх TLS (Transport Layer Security). Старое название TLS — SSL (Secure Sockets Layer), поэтому термины часто взаимозаменяемы, но SSL — это устаревший предшественник, а TLS — современный стандарт:
HTTP (обычный): HTTP → TCP → IP
HTTPS (TLS 1.3): HTTP → TLS → TCP → IP
HTTPS (HTTP/3): HTTP → QUIC (TLS 1.3 внутри) → UDP → IP
TLS располагается между HTTP и TCP: HTTP формирует запрос, TLS шифрует его, TCP разбивает на пакеты и отправляет. Для HTTP-приложения работа через TLS прозрачна — оно пишет обычные HTTP-сообщения, а шифрование происходит на уровень ниже.
Почему до сих пор не всё на HTTPS
Ещё в 2015 году HTTPS был редкостью для некритичных сайтов — блоги, новости, форумы работали на HTTP. Проблемы были:
- Сертификаты стоили денег. До появления Let's Encrypt в 2016 году TLS-сертификат нужно было покупать у центра сертификации за $50–200 в год.
- Настройка требовала знаний. Нужно было вручную генерировать ключи, настраивать веб-сервер, обновлять сертификаты до истечения.
- Производительность. Ранние версии TLS добавляли два round-trip к рукопожатию, что на медленных соединениях было заметно.
Сегодня эти проблемы решены: Let's Encrypt выдаёт сертификаты бесплатно и автоматически, Certbot и acme.sh автоматизируют обновление, а TLS 1.3 сократил рукопожатие до одного round-trip. Современный веб на 90%+ работает по HTTPS.
Атака SSL Stripping: как обходят HTTPS
SSL Stripping — атака, при которой злоумышленник не даёт пользователю перейти на HTTPS. Находясь между клиентом и сервером (MITM), атакующий:
- Перехватывает HTTP-запрос пользователя к
example.com. - Сам устанавливает HTTPS-соединение с
example.com(выступая как клиент). - Пользователю возвращает ответы по HTTP, снимая шифрование.
Пользователь видит обычный сайт без замка, атакующий читает все данные. Защита от этого — HSTS (разберём в уроке 7-5), который заставляет браузер всегда использовать HTTPS.
Что шифрует HTTPS, а что нет
HTTPS шифрует содержимое HTTP-сообщений: URL после домена, заголовки, тело. Но метаданные, необходимые для маршрутизации, остаются видны:
Видно провайдеру: IP-адрес сервера (93.184.216.34)
Порт (443 = HTTPS)
Домен через SNI (example.com)
Размер и время пакетов
Не видно провайдеру: Полный URL (/login?user=ivan)
Заголовки (Cookie, User-Agent)
Тело запроса и ответа
Сам факт того, что ты зашёл на example.com, скрыть нельзя — IP-пакеты должны дойти до сервера. Но что именно ты там делал — надёжно скрыто.
Как узнать, что сайт на HTTPS
Браузер показывает замок в адресной строке рядом с URL. Замок означает: соединение зашифровано, сертификат проверен, данные защищены от перехвата. Отсутствие замка — браузер покажет предупреждение «Not secure» или вовсе не откроет сайт.
Проверь себя
- Какие три свойства даёт HTTPS по сравнению с HTTP?
- Может ли провайдер прочитать содержимое HTTPS-запроса?
- Почему в 2016 году произошёл массовый переход на HTTPS?
- Конфиденциальность (шифрование), целостность (защита от изменений), аутентичность (проверка подлинности сервера).
- Нет. Провайдер видит IP-адреса и порты, но содержимое запросов и ответов зашифровано TLS.
- Let's Encrypt запустил бесплатные сертификаты и автоматизированное обновление, убрав финансовый и технический барьеры.
Что унести с урока
- HTTP передаёт данные открытым текстом — любой в цепочке сети может их прочитать.
- Man-in-the-Middle на HTTP позволяет не только читать, но и изменять трафик.
- HTTPS = HTTP + TLS. Добавляет конфиденциальность, целостность и аутентичность.
- Let's Encrypt и TLS 1.3 сделали HTTPS стандартом, а не опцией.
В следующем уроке разберём, как работает TLS/SSL — симметричное и асимметричное шифрование, обмен ключами и почему гибридный подход самый эффективный.