← Назад к вопросам
Чем отличается 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):
- Пользователь вводит пароль на публичном Wi-Fi
- Пароль передаётся в открытом виде: "POST /login?user=john&password=123456"
- Злоумышленник в одной сети может перехватить (MITM атака)
- Он видит пароль и может выдавать себя за сервер
С HTTPS:
- Все данные зашифрованы TLS
- Злоумышленник видит только: Encrypted(0x8f3a9...)
- Без session key он не может расшифровать
- Браузер проверит подпись сертификата и откажется доверять подделанному серверу