Wiki
Сеть

TLS-handshake — что это простыми словами

TLS-handshake — процесс установления защищённого соединения: обмен сертификатами, согласование шифров и ключей. В TLS 1.3 — 1 round-trip, в TLS 1.2 — 2.

TLS-handshake — процедура в начале каждого HTTPS/TLS-соединения, в которой клиент и сервер: (а) договариваются о версии протокола и cipher-suite, (б) сервер доказывает свою идентичность сертификатом, (в) генерируется общий сессионный ключ. Дальше всё, что летит по соединению, шифруется этим ключом.

TLS 1.3 (2018) — 1 round-trip (1-RTT). Клиент шлёт ClientHello с ключевым материалом (для нескольких групп кривых), сервер сразу отвечает ServerHello + Certificate + Finished. Клиент валидирует, шлёт Finished. Всё, соединение готово, appdata полетели. Разница с 1.2: там было 2-RTT (ClientHello → ServerHello → ClientKeyExchange → Finished), задержка старта 100-200 мс на дальнем соединении.

0-RTT resumption: если клиент уже общался с сервером — есть PSK (Pre-Shared Key), может послать appdata сразу с ClientHello, до ответа сервера. Полезно для мобильных клиентов и API. Ограничение: 0-RTT данные подвержены replay-атаке, для критичных операций (payment) отключают.

Cipher suites: TLS 1.3 радикально сократил список — оставили AEAD-only: `TLS_AES_128_GCM_SHA256`, `TLS_AES_256_GCM_SHA384`, `TLS_CHACHA20_POLY1305_SHA256`. Никаких RC4, 3DES, MD5, CBC-based — всё, что уязвимо. TLS 1.2 конфиги надо чистить вручную (см. Mozilla SSL Configurator).

SNI (Server Name Indication) — расширение TLS, клиент шлёт имя хоста в открытом виде на handshake. Позволяет одному IP держать много HTTPS-сайтов. Проблема: провайдер видит, куда вы идёте. ECH (Encrypted Client Hello) — шифрует SNI под ключом, взятым из DNS. Поддержка: Chrome 117+, Cloudflare, но пока не по умолчанию.

Частые вопросы

Как проверить, какой TLS работает?
`openssl s_client -connect example.com:443` — покажет протокол, cipher, сертификаты. `nmap --script ssl-enum-ciphers -p 443` — все поддерживаемые cipher-suite.
TLS 1.2 всё ещё безопасен?
Да, если правильно настроен (Mozilla intermediate profile). Но TLS 1.3 быстрее и безопаснее «by default» — переходить стоит.

Смотрите также