Объясните процесс установления SSL/TLS соединения (handshake).

«Объясните процесс установления SSL/TLS соединения (handshake).» — вопрос из категории Безопасность, который задают на 23% собеседований Devops Инженер. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

TLS handshake — это криптографический протокол, который устанавливает безопасный канал связи между клиентом и сервером перед началом передачи данных. Вот ключевые этапы:

1. Client Hello: Клиент отправляет серверу:

  • Поддерживаемые версии TLS (например, TLS 1.2, 1.3).
  • Случайное число (Client Random).
  • Список поддерживаемых наборов шифров (Cipher Suites).

2. Server Hello: Сервер отвечает:

  • Выбранную версию TLS и набор шифров.
  • Свое случайное число (Server Random).
  • Свой SSL-сертификат, содержащий его публичный ключ.

3. Аутентификация и обмен ключами:

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

4. Генерация сессионных ключей: И клиент, и сервер независимо вычисляют Master Secret на основе Client Random, Server Random и Pre-Master Secret. Из Master Secret генерируются идентичные сессионные ключи для симметричного шифрования и MAC (Message Authentication Code).

5. Завершение рукопожатия: Обе стороны отправляют друг другу Finished-сообщение, зашифрованное уже новыми сессионными ключами. Это подтверждает, что handshake прошел успешно и дальнейшая передача данных будет зашифрована.

Для DevOps: Мы настраиваем это на веб-серверах (Nginx/Apache) или на Ingress-контроллерах, управляем сертификатами через cert-manager с автоматическим выпуском от Let's Encrypt.