Ответ
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.