Когда пользователь вводит HTTPS-адрес в браузере, первая коммуникация с сервером происходит за несколько миллисекунд. Эта коммуникация называется SSL или TLS-рукопожатием, и в ходе нее стороны узнают друг друга, устанавливают доверие и создают ключ для последующего зашифрованного обмена. Кажущийся простым процесс на самом деле объединяет несколько механизмов безопасности и составляет основу конфиденциальности в Интернете.
Этап client hello
Рукопожатие начинается со стороны браузера пользователя. Браузер отправляет серверу сообщение "client hello", в котором сообщает свои возможности: какие версии TLS поддерживает, какие наборы шифров может использовать, какие методы компрессии знает. Также клиент отправляет случайное число (client random), которое позже используется для генерации ключа. В поле SNI указывается, к какому домену идет обращение — это важно, когда на одном IP-адресе работает несколько сайтов.
Server hello и сертификат
Сервер отвечает и сообщает свой выбор: какая версия TLS и набор шифров будут использованы. Сервер также отправляет свое случайное число (server random) и предоставляет сертификат. Через сертификат сервер доказывает свою подлинность — он подписан Certificate Authority и связан с корневыми сертификатами, которым браузер уже доверяет. Браузер проверяет сертификат: срок действия, соответствие домена, надежность подписавшего и отсутствие отзыва.
Обмен ключами
На следующем этапе стороны должны создать общий секретный ключ для симметричного шифрования. В современных версиях TLS это делается через алгоритм Диффи-Хеллмана. Клиент и сервер обмениваются открытыми ключевыми данными, и каждый из них независимо вычисляет один и тот же секретный ключ. Замечательная особенность этого подхода в том, что даже если кто-то прослушивает соединение, он не сможет восстановить этот ключ. Это свойство называется forward secrecy и особенно важно потому, что даже при будущей компрометации серверного ключа старые записи останутся нерасшифрованными.
Сообщение finished и переход к симметричной связи
После создания ключа стороны отправляют друг другу сообщение "finished", содержащее хеш всех сообщений рукопожатия. Этот шаг подтверждает, что процесс не был искажен и не было постороннего вмешательства. После этого все последующие данные передаются с симметричным шифрованием — AES или ChaCha20. В TLS 1.3 процесс оптимизирован и завершается за один проход (1-RTT), тогда как в старом TLS 1.2 требовалось два прохода.
Sayt.uz практика
Инфраструктура Sayt.uz весной 2036 года ввела TLS 1.3 как обязательное требование. По статистике, после обновления среднее время рукопожатия сократилось с 187 миллисекунд до 94 — то есть почти на 50 процентов. Это повысило скорость загрузки сайтов на 12 процентов и напрямую повлияло на пользовательский опыт. Для клиентов Sayt.uz TLS 1.3 и forward secrecy включены по умолчанию на всех тарифах. Wildcard SSL стоит 645 000 сум, DV-сертификат — 312 000 сум, EV-сертификат начинается от 1 870 000 сум. Техническая поддержка решает проблемы handshake в среднем за 38 минут.