Кабинет

Тест TLS-отпечатка: JA3, JA4, HTTP/2, HTTP/3 и TCP

Еще до того, как заработает код страницы, наш сервер видит, как ваш браузер открывает соединение. Браузер может назваться как угодно, но TLS-рукопожатие и настройки HTTP/2 показывают, какой движок на самом деле отправил запрос, а первый TCP-пакет выдает систему, которая открыла соединение. Еще мы предлагаем браузеру HTTP/3 и смотрим, перейдет ли он на QUIC и как.

Проверяю браузер…

Что читает этот тест

Открывая HTTPS-соединение, браузер сначала отправляет ClientHello: версии TLS, наборы шифров и расширения, которые он поддерживает, в своем порядке. Наш отдельный сервер проверки читает это сообщение еще до того, как заработает код страницы, и делает из него два отпечатка, JA3 и JA4, а также определяет семейство TLS-стека: Chrome и другие браузеры на Chromium, Firefox, Safari и WebKit или программа.

По HTTP/2 браузер еще отправляет свои настройки SETTINGS и по-своему упорядочивает псевдозаголовки запроса. Chromium, Firefox и Safari делают это по-разному, а HTTP-библиотеки на Python, Go или Node снова иначе. Страница сверяет оба с браузером, который называет ваш User-Agent.

Еще глубже лежит сам TCP. Первый пакет соединения несет привычки системы, которая его открыла: начальный TTL, размер окна, MSS и порядок TCP-опций. По TTL и порядку опций наш сервер узнает семейство системы (Windows, macOS и iOS, Linux и Android) собственной подписью SpoofLens и сверяет его с системой из User-Agent. Отдельно сравнивается задержка: сколько идет путь по сети по данным нашего сервера и сколько ждет ответа сама страница. Прокси между браузером и сервером разводит эти два числа.

Отдельно страница проверяет QUIC, на котором работает HTTP/3. Наш сервер предлагает браузеру HTTP/3 и смотрит, перейдет ли он на него, с какого адреса придет QUIC-соединение и как браузер построил QUIC-рукопожатие. Без QUIC живет много честных людей: компании и часть сетей режут UDP. Поэтому само отсутствие QUIC ничего не значит, важно только сочетание: UDP до нас доходит, браузер умеет HTTP/3, а попытки не было, или QUIC пришел с другого адреса.

Как читать результат

  • TLS-стек: семейство браузеров, которому принадлежит рукопожатие. «Не браузер» значит скрипт, HTTP-библиотеку, антивирус или корпоративный прокси, который сам открывает HTTPS-соединения.
  • JA4 и JA3: короткие отпечатки рукопожатия. Та же версия браузера на той же системе дает тот же JA4, поэтому он удобен для сравнения профилей.
  • HTTP/2 похоже на: семейство, на которое указывают настройки HTTP/2 и порядок псевдозаголовков.
  • TCP-подпись: семейство системы, которая открыла соединение, и значения ее первого пакета (TTL, MSS, окно, порядок опций). Если здесь Linux, а браузер говорит Windows, соединение скорее всего открыл прокси.
  • Задержка: два числа, первое меряет наш сервер, второе сама страница на том же соединении. Обычно они близки.
  • QUIC и HTTP/3: перешел ли браузер на HTTP/3 после нашего предложения, чей сетевой стек собрал QUIC-рукопожатие, и 0-RTT, если браузер возобновил прошлое соединение. «Браузер не пробовал» при рабочем UDP чаще всего значит прокси в настройках браузера.
  • Протокол каждого запроса: что говорит о каждом запросе сам браузер (h2 или h3). Первый обычно идет по TCP: о HTTP/3 браузер узнает из ответа на него.
  • Вердикт: зеленый результат значит, что соединение соответствует браузеру. TLS-рукопожатие от другого браузера учитывается в полной проверке, расхождение HTTP/2 тоже (с 0.17.0), а расхождения TCP и QUIC пока показываются как справка, пока мы проверяем их на настоящих устройствах.

Подробнее по теме

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

Можно ли изменить свой TLS-отпечаток?
Не настройками браузера. Рукопожатие делает сетевой код движка, поэтому оно показывает настоящий движок даже тогда, когда User-Agent изменен.
Почему мой JA4 изменился после обновления браузера?
Новые версии иногда добавляют или убирают расширения и шифры. Семейство остается тем же, меняется только точный отпечаток.
Антивирус показывается как «не браузер». Это плохо?
Некоторые антивирусы и корпоративные прокси проверяют HTTPS, сами открывая соединение, поэтому сайт видит их рукопожатие вместо браузерного. Это не подмена, но сайты, которые защищаются от ботов, видят то же самое.
Что такое TCP-подпись?
Наша собственная подпись: семейство системы по начальному TTL и порядку TCP-опций первого пакета, а окно и MSS показываются рядом. Пассивное определение системы по TCP придумали давно, а набор признаков и названия семейств мы сделали сами.
Почему у меня не работает QUIC?
Чаще всего его режет сеть: корпоративные, школьные и некоторые гостевые сети блокируют UDP. Еще QUIC выключают политикой компании, флагом в браузере или прокси в настройках браузера, потому что HTTP- и SOCKS-прокси не переносят UDP. Само по себе это не признак подмены, и индекс за это не снижается.
Что-нибудь сохраняется?
Нет. Рукопожатия, первый TCP-пакет и первые QUIC-пакеты читаются для этой проверки и забываются, считаются только суммы за день, без самих проверок.