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

Как происходит SSL/TLS Handshake

2.3 Middle🔥 211 комментариев
#Безопасность#Сети и протоколы

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

🐱
deepseek-v3.2PrepBro AI5 апр. 2026 г.(ред.)

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

Процесс SSL/TLS Handshake

SSL/TLS Handshake (или "рукопожатие") — это ключевой процесс установления защищенного соединения между клиентом и сервером перед передачей данных. Этот механизм обеспечивает аутентификацию, обмен ключами и согласование параметров для создания безопасного канала связи. В современных системах используется преимущественно TLS (Transport Layer Security), являющийся развитием SSL (Secure Sockets Layer). Процесс состоит из нескольких четко определенных этапов.

Основные этапы TLS Handshake (например, TLS 1.2)

В классическом варианте с использованием RSA для аутентификации сервера и обмена ключами процесс выглядит следующим образом:

  1. Client Hello
    Клиент отправляет серверу сообщение, содержащее:
    *   Версию TLS (например, TLS 1.2).
    *   **Случайное число (Client Random)**.
    *   Список поддерживаемых **симметричных шифров (Cipher Suites)** (например, `TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384`).
    *   Список поддерживаемых методов компрессии.
    *   Поддерживаемые расширения (например, SNI для указания имени домена).

```bash
# Пример просмотра поддерживаемых шифров клиентом (OpenSSL)
openssl ciphers -v
```

2. Server Hello

    Сервер отвечает, выбирая из предложенного списка:
    *   Конкретную версию TLS.
    *   Конкретный **Cipher Suite**.
    *   **Случайное число (Server Random)**.
    Сервер также может запросить аутентификацию клиента (опционально).

  1. Аутентификация сервера и передача ключа (в RSA)
    Сервер отправляет свой **цифровой сертификат**, содержащий его публичный ключ и подписанный доверенным Центром Сертификации (CA). Клиент проверяет цепочку доверия сертификата.
    Затем (в старом режиме RSA) сервер может создать и передать **Pre-Master Secret**, зашифрованный своим публичным ключом из сертификата.

```bash
# Проверка сертификата сервера с помощью OpenSSL
openssl s_client -connect example.com:443 -showcerts
```

4. Генерация ключей

    Используя **Client Random**, **Server Random** и **Pre-Master Secret**, обе стороны независимо вычисляют одинаковый **Master Secret**. Из него затем генерируются все рабочие ключи для симметричного шифрования данных и MAC-коды для проверки целостности.

  1. Завершение Handshake и переход к защищенной передаче данных
    *   **Client Change Cipher Spec**: Клиент сообщает, что с этого момента будет использовать согласованные ключи и алгоритмы.
    *   **Client Finished**: Клиент отправляет зашифрованное сообщение, содержащее хэш всех предыдущих сообщений handshake для проверки сервером.
    *   **Server Change Cipher Spec** и **Server Finished**: Сервер выполняет аналогичные шаги.
    После успешной проверки сообщений `Finished` обеими сторонами handshake завершается, и начинается передача защищенных (**Application Data**) данных с использованием выбранного симметричного шифра (например, AES).

Современный подход: Handshake с ECDHE (Elliptic Curve Diffie-Hellman Ephemeral)

В современных реализациях (особенно с TLS 1.3) чаще используется ECDHE, который обеспечивает Forward Secrecy. Ключи для каждой сессии уникальны и не зависят от долговременного приватного ключа сервера.

  • После Server Hello сервер отправляет свой сертификат для аутентификации, но не использует его публичный ключ для обмена секретом.
  • Сервер также отправляет свои параметры ECDHE (публичную часть временного ключа).
  • Клиент генерирует свои собственные временные параметры ECDHE и отправляет их серверу.
  • Затем, используя алгоритм Диффи"Hелмана на эллиптических кривых, обе стороны, имея свои приватные и публичные части, вычисляют общий Pre-Master Secret без его передачи по сети. Это значительно повышает безопасность.

Сокращенный Handshake: TLS Session Resumption

Для уменьшения нагрузки и времени установления соединения при повторном подключении может использоваться:

  • Session ID: Сервер сохраняет параметры сессии и позволяет клитету восстановить ее по ID.
  • TLS Session Tickets: Сервер передает клиенту "билет" (зашифрованные параметры сессии), который клиент может предъявить для быстрого восстановления соединения.

TLS 1.3 и оптимизация процесса

TLS 1.3 радикально упрощает и ускоряет handshake:

  • Удалены уязвимые и слабые алгоритмы.
  • Количество этапов сокращено, часто handshake завершается за 1 RTT (Round Trip Time).
  • ECDHE стал обязательным, что гарантирует Forward Secrecy для всех соединений.

Таким образом, SSL/TLS Handshake — это сложный, но фундаментальный многоэтапный протокол, который обеспечивает безопасное начало любого HTTPS соединения, гарантируя конфиденциальность, целостность и аутентичность передаваемых данных. В контексте DevOps понимание этого процесса критически важно для корректной настройки серверов, мониторинга соединений, диагностики проблем безопасности и работы с инструментами вроде openssl, tcpdump или анализаторов трафика.

Как происходит SSL/TLS Handshake | PrepBro