TLS Handshake — это процесс установки защищённого соединения между клиентом (например, вашим браузером) и сервером (например, сайтом).
Цель — согласовать алгоритмы, проверить подлинность сервера (и, опционально, клиента) и обменяться ключами для симметричного шифрования.
Клиент отправляет:
список поддерживаемых версий TLS,
набор поддерживаемых шифров,
случайное число (client random),
(опционально) список поддерживаемых расширений (например, SNI для указания имени хоста).
Сервер выбирает:
версию TLS и шифр из предложенных клиентом,
отправляет своё случайное число (server random),
свой сертификат с публичным ключом (подписанный доверенным центром),
(опционально) подтверждает выбранные расширения.
Клиент проверяет сертификат сервера через цепочку доверия (CA → сервер).
В TLS 1.2: клиент генерирует pre-master secret и шифрует его публичным ключом сервера → сервер расшифровывает приватным ключом → на основе client random + server random + pre-master secret обе стороны вычисляют мастер-ключ для симметричного шифрования.
В TLS 1.3: используют алгоритмы Диффи-Хеллмана для согласования общего секрета (без передачи pre-master секретов напрямую).
Каждая сторона отправляет сообщение "Finished", подписанное ключом из установленного общего секрета → подтверждает, что handshake не был подменён.
С этого момента всё общение шифруется сессионным симметричным ключом.
Цель handshake — безопасно договориться о симметричном ключе для шифрования сессии.
В процессе происходит аутентификация сервера (и опционально клиента), защита от подмены и согласование криптографических параметров.