Skip to main content

Как устанавливается HTTPS-соединение: подробный разбор TLS

TLS-handshake (TLS-рукопожатие)

TLS-рукопожатие позволяет клиенту и серверу установить общие секретные ключи, с помощью которых они будут безопасно обмениваться данными.
Термин SSL используют по привычке, но реально применяется TLS.

Приветственные сообщения (Hello Messages)

  1. ClientHello — клиент начинает рукопожатие и сообщает версию TLS, список поддерживаемых CipherSuites, а также случайное число client random для генерации ключей.
  2. ServerHello — сервер выбирает один из предложенных алгоритмов, отправляет server random и идентификатор сессии.

Аутентификация

  1. Server Certificate — сервер отправляет цифровой сертификат, подтверждая свою подлинность.
  2. Client Certificate Request (опционально) — сервер может запросить сертификат клиента.
  3. Client Certificate — клиент отправляет сертификат и подтверждает владение приватным ключом сообщением Certificate Verify.
  4. Проверка сертификатов — клиент проверяет сертификат сервера (подпись, срок действия, доверие к CA). Сервер, если запросил, проверяет сертификат клиента.

Генерация общего ключа

  1. Client Key Exchange — клиент отправляет данные для генерации pre-master secret.
    • В TLS 1.2 при использовании RSA pre-master шифруется публичным ключом сервера.
    • При использовании (EC)DHE клиент и сервер обмениваются ключами и независимо вычисляют общий секрет.
  2. Из pre-master получается master secret, затем формируется session key — симметричный ключ для обеих сторон.

Установка защищённого канала

  1. Change Cipher Spec — стороны сообщают, что переходят на новые ключи и алгоритмы шифрования.
  2. Finished — клиент отправляет зашифрованное сообщение Finished, сервер отвечает своим Finished.

С этого момента весь трафик шифруется симметричным session key.

Что такое CipherSuites

CipherSuite — набор правил для шифрования. Он определяет:
• способ обмена ключами
• алгоритм симметричного шифрования
• метод проверки целостности данных
• алгоритм цифровой подписи

RSA и (EC)DHE

RSA — асимметричный алгоритм (публичный + приватный ключ). В старых версиях TLS использовался для передачи секрета: клиент шифрует данные публичным ключом сервера.
ECDHE — алгоритм, который позволяет обеим сторонам динамически сгенерировать общий секретный ключ.

Главное отличие:
RSA: весь секрет завязан на приватный ключ сервера. Если он скомпрометирован — можно расшифровать старый трафик.
ECDHE: ключ генерируется для каждой сессии отдельно, старые данные остаются защищёнными (Perfect Forward Secrecy).

Что важно знать

SSL — устарел, используется только как термин.
TLS — современный протокол защиты соединений.
Шаги рукопожатия:

  1. Приветствие — согласование версии и алгоритмов.
  2. Аутентификация — проверка сертификатов.
  3. Генерация ключей — создание секретов для шифрования.
  4. Установка канала — обмен зашифрованными Finished.

CipherSuites — набор правил шифрования.
RSA — использовался в TLS 1.2.
ECDHE — используется в TLS 1.3 и обеспечивает стойкость и защиту прошлых сессий.