TLS-отпечаток

TLS-отпечаток — набор параметров, которые программа отправляет в начале защищённого соединения; по нему сайт распознаёт тип клиента.

Обновлено · Редакция Prokso

Когда браузер или скрипт открывает сайт по HTTPS, сначала происходит рукопожатие TLS. Первое сообщение клиента называется ClientHello, и оно идёт в открытом виде. В нём программа перечисляет, что умеет: версии TLS, наборы шифров, расширения и их порядок, поддерживаемые кривые и протоколы.

Каждая библиотека формирует ClientHello по-своему. У Chrome, Firefox и Safari свои типичные наборы, а у библиотек для скриптов на Python, Go или Node.js — свои. Поэтому по этим параметрам сайт может понять, какая программа к нему обращается, даже не глядя на заголовки.

Чтобы сравнивать отпечатки было удобно, их превращают в короткую строку. Самые известные методы — JA3 и более новый JA4. JA3 берёт версию, шифры, расширения и кривые и считает из них хеш. JA4 дополнительно учитывает протокол и сортирует списки, потому что некоторые браузеры перемешивают порядок расширений при каждом соединении.

Прокси TLS-отпечаток не меняет. Для HTTPS программа отправляет прокси команду CONNECT, и дальше прокси только пересылает зашифрованные байты между вами и сайтом. Рукопожатие TLS идёт напрямую между вашей программой и сайтом, а прокси видит разве что имя сайта из поля SNI.

Из-за этого скрипт и настоящий браузер выглядят для сайта по-разному, даже если у них одинаковый IP и одинаковый User-Agent. Если заголовок говорит «Chrome», а ClientHello типичен для библиотеки Python, сайт видит это расхождение. То же касается headless-браузеров: их TLS-отпечаток обычно близок к обычному браузеру, но другие признаки могут отличаться.

TLS-отпечаток удобен для сайтов тем, что его трудно случайно изменить. Он зависит от версии библиотеки и её настроек, а не от того, какую страницу вы открываете или через какую сеть подключаетесь. Когда браузер обновляется, его отпечаток тоже может немного измениться, поэтому сайты обычно сравнивают его с известными значениями для текущих версий. Отдельные сервисы позволяют посмотреть собственный отпечаток и сравнить, как выглядят разные программы.

TLS-отпечаток — лишь одна часть более широкого отпечатка браузера. Сайты сочетают его с другими данными и сами решают, как на это реагировать. Прокси отвечает за IP-адрес, а параметры соединения зависят от программы, которой вы пользуетесь.

Вопросы и ответы

Меняет ли прокси TLS-отпечаток?

Нет. HTTPS-соединение через CONNECT зашифровано от вашей программы до сайта, поэтому сайт видит ClientHello вашей программы, а прокси только пересылает байты.

Что такое JA3 и JA4?

Это распространённые способы записать TLS-отпечаток короткой строкой. JA3 считает хеш из версии, шифров, расширений и кривых, а JA4 ещё и сортирует списки и учитывает протокол.

Резидентские $1.59, мобильные $2.50, серверные $0.65 за 1 ГБ

Регистрация за минуту, доступы сразу после оплаты.

Создать аккаунт