В ходе TLS/SSL-рукопожатия клиенты и серверы обмениваются SSL-сертификатами, требованиями к набору шифров и случайно сгенерированными данными для создания сеансовых ключей.
После прочтения этой статьи вы сможете:
Связанный контент
Подпишитесь на theNET, ежемесячный обзор наиболее популярных аналитических сведений об Интернете от Cloudflare!
Копировать ссылку статьи
TLS — это протокол шифрования и аутентификации, разработанный для защиты интернет-коммуникаций. TLS-рукопожатие — это процесс, который запускает сеанс связи, использующий TLS. Во время TLS-рукопожатия две взаимодействующие стороны обмениваются сообщениями, чтобы подтвердить друг друга, проверить друг друга, установить алгоритмы шифрования, которые они будут использовать, и согласовать ключи сеанса. TLS-рукопожатия являются важной составляющей процесса работы HTTPS.
SSL, или Secure Sockets Layer, был оригинальным протоколом безопасности, разработанным для HTTP. Некоторое время назад SSL был заменен на TLS, или Transport Layer Security. SSL-рукопожатия теперь называются TLS-рукопожатиями, хотя название "SSL" по-прежнему широко используется.
TLS-рукопожатие происходит всякий раз, когда пользователь переходит на веб-сайт по протоколу HTTPS, и браузер сначала начинает запрашивать сервер-источник сайта. TLS-рукопожатие также происходит всякий раз, когда любые другие коммуникации используют HTTPS, включая вызовы API и запросы DNS-over-HTTPS.
TLS-рукопожатие происходит после того, как с помощью TCP-рукопожатия было установлено TCP-соединение.
В ходе TLS-рукопожатия клиент и сервер вместе выполняют следующие действия:
TLS-рукопожатия – это серия датаграмм, или сообщений, которыми обмениваются клиент и сервер. TLS-рукопожатие включает в себя несколько этапов, в ходе которых клиент и сервер обмениваются информацией, необходимой для завершения рукопожатия и обеспечения возможности дальнейшего общения.
Точные шаги в рамках TLS-рукопожатия зависят от используемого алгоритма обмена ключами и наборов шифров, поддерживаемых обеими сторонами. Алгоритм обмена ключами RSA, который в настоящее время считается небезопасным, использовался в версиях TLS до версии 1.3. Это происходит примерно следующим образом:
Все TLS-рукопожатия используют асимметричную криптографию (открытый и закрытый ключ), но не все будут использовать закрытый ключ в процессе генерации сеансовых ключей. Например, кратковременное рукопожатие Диффи-Хеллмана происходит следующим образом:
*Параметр DH: DH – это аббревиатура от Diffie-Hellman (Диффи-Хеллман). Алгоритм Диффи-Хеллмана использует экспоненциальные вычисления для получения одного и того же premaster secret'а. Сервер и клиент предоставляют свои параметры для вычисления, они проводят различные вычисления с каждой стороны, но получают одинаковый результат.
Более подробно о различиях между эфемерными рукопожатиями Диффи-Хеллмана и другими видами рукопожатий, а также о том, как с их помощью достигается прямая секретность, читайте в статье Что такое Keyless SSL?.
TLS 1.3 не поддерживает RSA, а также другие наборы шифров и параметры, которые уязвимы для атак. Также сокращает время рукопожатия TLS, делая рукопожатие TLS 1.3 более быстрым и безопасным.
Основными шагами рукопожатия TLS 1.3 являются:
TLS 1.3 также поддерживает еще более быструю версию рукопожатия TLS, которая вообще не требует никаких циклов "туда-обратно" или обратной связи между клиентом и сервером. Если клиент и сервер ранее подключались друг к другу (например, если пользователь ранее посещал веб-сайт), каждый из них может получить еще один общий секрет из первого сеанса, называемый "основным секретом возобновления". Сервер также отправляет клиенту нечто, называемое билетом сеанса, во время указанного первого сеанса. Клиент может использовать указанный общий секрет для отправки зашифрованных данных на сервер в своем первом сообщении следующего сеанса вместе с этим билетом сеанса. И TLS-соединение между клиентом и сервером возобновляется.
Набор шифров — это ряд алгоритмов, используемый при установлении защищенного соединения. Существует несколько широко используемых наборов шифров, и важной частью TLS-рукопожатия является согласование того, какой набор шифров будет использоваться для такого рукопожатия.
Чтобы узнать больше о TLS/SSL, см. раздел Как работает SSL? Чтобы проверить, правильно ли сайт использует TLS, посетите Диагностический центр Cloudflare.