Как работает HTTPS?csharp-54

Основная концепция HTTPS

HTTPS (HyperText Transfer Protocol Secure) - это защищенная версия HTTP, которая использует шифрование для обеспечения конфиденциальности и целостности данных. В основе HTTPS лежит комбинация двух протоколов:

  1. HTTP - для передачи данных
  2. TLS (Transport Layer Security) - для шифрования
HTTP + TLS = HTTPS

Ключевые компоненты HTTPS

1. Асимметричное шифрование

  • Использует пару ключей: публичный и приватный
  • Публичный ключ шифрует, приватный - расшифровывает
  • Применяется при установке соединения

2. Симметричное шифрование

  • Использует один ключ для шифрования и расшифровки
  • Более эффективно для передачи данных
  • Ключ генерируется во время handshake

3. Цифровые сертификаты

  • Подтверждают подлинность сервера
  • Содержат публичный ключ и информацию о владельце
  • Подписаны доверенными центрами сертификации (CA)

Процесс установки HTTPS-соединения

1. Client Hello

Клиент отправляет:

  • Поддерживаемые версии TLS
  • Список шифров (cipher suites)
  • Случайное число (Client Random)
Клиент -> Сервер:
TLS Version: 1.2
Cipher Suites: TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256
Random: 5b7d...

2. Server Hello

Сервер отвечает:

  • Выбранную версию TLS и шифр
  • Свой сертификат
  • Случайное число (Server Random)
Сервер -> Клиент:
TLS Version: 1.2
Cipher Suite: TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256
Certificate: [сертификат]
Random: 3f2a...

3. Проверка сертификата

Клиент проверяет:

  • Срок действия сертификата
  • Цепочку доверия до корневого CA
  • Соответствие домену

4. Обмен ключами

Используется алгоритм Диффи-Хеллмана (ECDHE) для безопасной генерации общего секрета:

Клиент:
  Генерирует временный ключ (Client Params)
  Шифрует публичным ключом сервера

Сервер:
  Генерирует временный ключ (Server Params)
  Расшифровывает своим приватным ключом

5. Генерация сессионных ключей

Обе стороны вычисляют:

  • Master Secret из Client Random, Server Random и общего секрета
  • Ключи для шифрования и MAC (Message Authentication Code)

6. Завершение handshake

  • Обмен сообщениями Finished с хешем всех предыдущих сообщений
  • Проверка целостности handshake

Обмен данными после handshake

  1. Данные разбиваются на записи (records)
  2. Каждая запись шифруется симметричным алгоритмом
  3. Добавляется MAC для проверки целостности
  4. Нумерация записей защищает от атак повторения
Запись TLS:
[Заголовок][IV][Шифрованные данные][MAC][Дополнение]

Особенности современных версий TLS

TLS 1.3 Улучшения:

  • Упрощенный handshake (1-RTT, 0-RTT)
  • Удалены небезопасные шифры
  • Обязательная forward secrecy

Важные заголовки HTTPS

Strict-Transport-Security: max-age=63072000; includeSubDomains; preload

Пример кода

var handler = new HttpClientHandler
{
    ServerCertificateCustomValidationCallback = (msg, cert, chain, errors) =>
    {
        // Кастомная проверка сертификата
        return errors == System.Net.Security.SslPolicyErrors.None;
    }
};

var client = new HttpClient(handler);
var response = await client.GetAsync("https://example.com");

Атаки и защита

  1. MITM: Предотвращается проверкой сертификатов
  2. Downgrade: Защита через HSTS
  3. BEAST/CRIME: Устранены в TLS 1.2+
  4. POODLE: Требуется отключение SSL 3.0

Резюмируем:

HTTPS обеспечивает безопасную передачу данных через комбинацию асимметричного шифрования при установке соединения, симметричного шифрования для передачи данных и цифровых сертификатов для аутентификации. Современные версии TLS (1.2, 1.3) обеспечивают защиту от известных атак и поддерживают forward secrecy для долгосрочной безопасности.