Перейти к содержимому
ecdsa.com

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

Начальный обмен сообщениями в TLS-соединении, в ходе которого клиент и сервер согласуют параметры, выполняют обмен ключами, проводят аутентификацию (обычно аутентифицируется сервер с помощью своего сертификата) и выводят ключи трафика.
Другие написанияTLS handshakeClientHello and ServerHelloHelloRetryRequest

TLS 1.3 (RFC 9846, § 2) требует одного цикла обмена (round trip): клиент отправляет ClientHello со списком поддерживаемых версий, наборов шифров, групп, key share и алгоритмов подписи; сервер отвечает ServerHello (со своим key share), а затем, уже в зашифрованном виде, EncryptedExtensions, Certificate, CertificateVerify (подпись над хешем транскрипта) и Finished; клиент отвечает своим Finished и может отправлять данные. Если клиент не угадал группу, сообщение HelloRetryRequest обходится в лишний цикл обмена.

TLS 1.2 требует двух циклов обмена, передаёт сертификаты в открытом виде, а при передаче ключа с помощью RSA не подписывает ничего эфемерного. Возобновление сессии с предварительно согласованным ключом (PSK) обходится без аутентификации по сертификату, а 0-RTT позволяет клиенту сразу отправить ранние данные (early data), но ценой защиты от повторного воспроизведения.

Отладка: openssl s_client -connect host:443 -servername host -tls1_3 -msg выводит каждое сообщение; чаще всего причина сбоя — несовпадение имени, отсутствие промежуточных сертификатов, отсутствие общего шифра или группы либо промежуточные устройства (middleboxes), которые мешают прохождению больших сообщений ClientHello (это снова актуально с постквантовыми key share размером больше 1 КБ).

Стандарты и ссылки

Все термины