Основная концепция HTTPS
HTTPS (HyperText Transfer Protocol Secure) - это защищенная версия HTTP, которая использует шифрование для обеспечения конфиденциальности и целостности данных. В основе HTTPS лежит комбинация двух протоколов:
- HTTP - для передачи данных
- TLS (Transport Layer Security) - для шифрования
Ключевые компоненты 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
- Данные разбиваются на записи (records)
- Каждая запись шифруется симметричным алгоритмом
- Добавляется MAC для проверки целостности
- Нумерация записей защищает от атак повторения
Запись 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");
Атаки и защита
- MITM: Предотвращается проверкой сертификатов
- Downgrade: Защита через HSTS
- BEAST/CRIME: Устранены в TLS 1.2+
- POODLE: Требуется отключение SSL 3.0
Резюмируем:
HTTPS обеспечивает безопасную передачу данных через комбинацию асимметричного шифрования при установке соединения, симметричного шифрования для передачи данных и цифровых сертификатов для аутентификации. Современные версии TLS (1.2, 1.3) обеспечивают защиту от известных атак и поддерживают forward secrecy для долгосрочной безопасности.