HTTPS

HTTP передаёт данные открытым текстом — любой, кто «прослушивает» сеть между вами и сервером (провайдер, Wi-Fi точка доступа, VPN), может читать логины, пароли, содержимое запросов. HTTPS = HTTP поверх TLS-шифрования: всё что передаётся — зашифровано.

Как видит пользователь: замочек в адресной строке браузера и https:// вместо http://.

Как работает HTTPS (упрощённо):

  1. Браузер подключается к серверу, просит показать SSL-сертификат.
  2. Сертификат содержит публичный ключ сервера и подпись доверенного центра сертификации (CA, например Let’s Encrypt).
  3. Браузер проверяет подпись (т.е. «верит» CA, который уже в системе) — убеждается, что говорит с настоящим сайтом, а не с поддельным.
  4. Браузер и сервер согласовывают сессионный ключ (через асимметричную криптографию) — весь дальнейший трафик шифруется этим ключом.

Что защищает HTTPS:

  • Шифрование данных в пути (нельзя прочитать пароли в Wi-Fi кафе)
  • Проверка подлинности сервера (нельзя подменить сайт)

Что НЕ защищает: уже взломанный сервер, вредоносный код на странице (XSS).

Копнуть глубже

TLS handshake — как за 3–5 шагов устанавливается защищённое соединение. Упрощённо (TLS 1.3, один round-trip):

  • клиент отправляет ClientHello с поддерживаемыми алгоритмами и своим открытым ключом (ephemeral key);
  • сервер отвечает ServerHello + сертификат + подпись;
  • клиент проверяет сертификат, из двух открытых ключей оба вычисляют общий секрет (ECDH);
  • дальше используется симметричное шифрование (AES-GCM) этим общим ключом — оно быстрее асимметричного.

Цепочка доверия сертификатов. Let’s Encrypt подписывает ваш сертификат своим промежуточным сертификатом, который подписан корневым CA. Корневые CA (около 150 штук) вшиты в операционную систему и браузеры. Браузер проходит всю цепочку и проверяет каждую подпись. Если хоть одна не валидна — браузер блокирует соединение с предупреждением «Ваше соединение не защищено».

HSTS (HTTP Strict Transport Security) — HTTP-заголовок, который говорит браузеру: «всегда обращайся ко мне только через HTTPS, даже если набрали http://». Без HSTS первый запрос может уйти через HTTP (и быть перехвачен), а потом уже будет редирект на HTTPS. С HSTS браузер сам делает upgrade до HTTPS без этого первого небезопасного запроса.

В Spring Boot HTTPS настраивается через application.yml:

server:
  ssl:
    key-store: classpath:keystore.p12
    key-store-password: ${SSL_PASSWORD}
    key-store-type: PKCS12
  port: 8443

На продакшене SSL обычно терминируется на уровне Nginx/балансировщика, а Spring работает по HTTP за ним (внутри сети).

🎤 Закрыл тему, если можешь объяснить:
• почему HTTP небезопасен и что конкретно защищает HTTPS;
• что такое SSL-сертификат и кто его подписывает (если дошёл до 2-го слоя).