← Назад к вопросам

Что такое выполнение рукопожатия в HTTPS?

2.2 Middle🔥 241 комментариев
#Сети и протоколы

Комментарии (1)

🐱
claude-haiku-4.5PrepBro AI30 мар. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Что такое выполнение рукопожатия в HTTPS?

HTTPS handshake (рукопожатие) — это процесс установления защищённого соединения между клиентом и сервером перед передачей данных. Это многоэтапный протокол (TLS/SSL), который обеспечивает аутентификацию, согласование алгоритмов шифрования и обмена ключами.

Этапы TLS 1.2 handshake

1. Client Hello

  • Клиент отправляет поддерживаемые версии TLS, cipher suites (комбинации алгоритмов шифрования), расширения
  • Включает случайное число (client random)

2. Server Hello

  • Сервер выбирает из предложенных версию TLS и cipher suite
  • Отправляет свои случайное число (server random)
  • Отправляет certificate (цифровой сертификат с публичным ключом)

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

  • Клиент проверяет подпись сертификата, его цепочку и сроки действия
  • Использует публичный ключ из сертификата

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

  • Для RSA: клиент генерирует pre-master secret, шифрует публичным ключом сервера
  • Для ECDHE (более современный): обмен эфемерными ключами Диффи-Хеллмана

5. Согласование сессионного ключа

  • Обе стороны используют: client random + server random + pre-master secret
  • Вычисляют master secret → сессионные ключи для шифрования

6. Finished сообщения

  • Обе стороны отправляют зашифрованное сообщение Finished для подтверждения

Пример временной последовательности:

Клиент                                  Сервер
  |---- ClientHello --------------------->|
  |<----- ServerHello --------------------|  
  |<----- Certificate -------------------|  
  |<----- ServerKeyExchange (ECDHE) -----|  
  |<----- ServerHelloDone -------------|  
  |---- ClientKeyExchange ------------->|
  |---- ChangeCipherSpec ------------->|
  |---- Finished (encrypted) --------->|
  |<----- ChangeCipherSpec -------------|  
  |<----- Finished (encrypted) ---------|  
Данные зашифрованы

Ключевые компоненты безопасности

Сертификат — документ с публичным ключом, подписанный Certificate Authority. Содержит информацию о сайте, издателе, сроках действия.

Cipher suite — комбинация алгоритмов:

  • Обмен ключами (RSA, ECDHE, DHE)
  • Шифрование (AES, ChaCha20)
  • Аутентификация (SHA-256, SHA-384)

Пример: ECDHE-RSA-AES256-GCM-SHA384

TLS 1.3 — упрощение

TLS 1.3 сократил handshake:

  • Убрана опасная поддержка старых версий
  • 1-RTT (1 round-trip time) вместо 2-RTT
  • Предиктивные ключи для zero-RTT (быстрое возобновление)

Для C++ разработчика

Обычно используются библиотеки:

  • OpenSSL — низкоуровневое управление TLS
  • libcurl — высокоуровневое API с HTTPS поддержкой
  • Boost.Asio — асинхронные сокеты с SSL/TLS
// Пример с OpenSSL
SSL_CTX* ctx = SSL_CTX_new(TLS_client_method());
SSL* ssl = SSL_new(ctx);
SSL_connect(ssl);  // Выполнить handshake

Почему это важно?

Handshake обеспечивает:

  • Конфиденциальность — данные зашифрованы
  • Целостность — невозможно подменить данные
  • Аутентификацию — сервер доказывает свою личность

Осторожность: неправильная настройка SSL/TLS — частая причина уязвимостей в production приложениях.

Что такое выполнение рукопожатия в HTTPS? | PrepBro