Кабінет

Тест 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-пакети читаються для цієї перевірки й забуваються, рахуються лише суми за день, без самих перевірок.