TLSフィンガープリンティングとは何か?JA3とJA4の違いを解説
Specialist in Anti-Bot Strategies
TL;DR:
- TLSフィンガープリンティングは、HTTPの1バイトが送られる前にTLSハンドシェイクからクライアントソフトウェアを特定します。 サーバーは
ClientHello(クライアントが提案するTLSバージョン、暗号スイート、拡張機能)を読み取り、「これはChromeです」または「これはPythonスクリプトです」と示すハッシュを導出します。 - JA3は元の方法であり、JA4はその現代的な置き換えです。 JA3(Salesforceによる)は、生の
ClientHelloフィールドを順番でハッシュ化していたため、ChromeがTLS拡張機能の順番をランダム化し始めると、JA3ハッシュが不安定になりました。JA4はまず暗号スイートと拡張機能をソートするため、フィンガープリントは安定します。 - JA4は人間が読み取れる形式であり、単一の不透明なハッシュではありません。
a_b_c形式は、TLSバージョン、SNIの有無、暗号および拡張機能の数、ALPNを前面にエンコードし、次にソートされた暗号および拡張リストをハッシュ化します — これは全体だけでなくその一部に基づいてマッチングできます。 - カスタムHTTPクライアントには非ブラウザのフィンガープリントがあります。
requests、curl、またはパッチされたライブラリは、実際のChromeでは送信しない暗号/拡張機能のセットを送信するため、そのJA4はクリーンなIPの背後でも目立ちます。 - 実際のブラウザが信頼できる答えです。 Scrapeless Scraping Browserは本物のChromiumであり、その
ClientHello— したがってJA3/JA4 — は実際のChromeと区別がつかず、普通の訪問者のものと同じです。 - 無料で開始できます。 新しいScrapelessアカウントには無料のScraping Browserランタイムが含まれています — app.scrapeless.comでサインアップしてください。
はじめに:TLSハンドシェイクはHTTPよりも先に明らかにします
TLSフィンガープリンティングは、TLSセッションを開始する方法から接続の背後にあるソフトウェアを特定します。その後に送信されるものからではありません。すべてのHTTPS接続は、クライアントがサポートするTLSバージョン、好む暗号スイート、拡張機能のリストを広告する ClientHello メッセージで始まります。これらの選択は、実際のChrome、Goプログラム、Pythonスクリプトの間で異なり、サーバーはそれらをハッシュして、IP、ユーザーエージェントおよびクッキーが全く正常に見える場合でも生き残るコンパクトな識別子を生成できます。
そのため、スクレイパーは住宅プロキシを回転させ、Chromeのユーザーエージェントを偽装しても、ブロックされることがあります:送信される TLS 1.3ハンドシェイク が最初からChromeのものではないからです。このガイドは、TLSフィンガープリントが何であるか、JA3およびJA4がどのようにそれを計算するか、そして本物のブラウザを実行することがフィンガープリントを提示する持続的な方法である理由を説明します。
TLSフィンガープリンティングが何から構築されているか
TLSフィンガープリンティングは、TLS接続を開くときにクライアントが送信する最初のメッセージである ClientHello のフィールドをハッシュ化したものです。入力はクライアントのTLSライブラリおよび設定の安定した特性です:
- 提供されるTLSバージョン(例えば、TLS 1.2または1.3)。
- クライアントがサポートする暗号スイート、それをリストする順番。
- クライアントが含める拡張機能 (SNI、ALPN、サポートされるグループ、署名アルゴリズムなど)。
- 広告される楕円曲線およびポイントフォーマット。
ブラウザのTLSスタックは、これらの値の特定の一貫した組み合わせを生成します。一方、スクリプトライブラリは異なるものを生成します。フィンガープリントはトランスポート層から導出されるため、ヘッダーやクッキーとは独立しています — ユーザーエージェントを変更しても、それに影響はありません。
JA3:元のTLSフィンガープリンントとその破綻理由
JA3は初めて広く採用されたTLSフィンガープリンティングであり、2017年にSalesforceのエンジニアによって公開されました。それは、TLSバージョン、暗号スイート、拡張機能、楕円曲線、および楕円曲線ポイントフォーマットの5つの ClientHello フィールドを順番に連結し、その文字列の MD5を取ります(TLS仕様によって予約されたGREASE値は無視します)。
順序依存性はJA3の弱点になりました。2023年、Chromeは接続ごとにTLS拡張機能の順番をランダム化し始めたため、1つのChromeインストールから次のリクエストに対して異なるJA3ハッシュが生成されました。接続ごとに変わるフィンガープリントはクライアントを特定するのには役に立たないため、検出ベンダーは順序に依存しない方法を必要としました。
JA4:現代的で順序安定な置き換え
JA4は JA4+ におけるTLSクライアントフィンガープリンティングであり、FoxIOのJohn Althouseによって作成されたネットワークフィンガープリンティング手法の一 suiteです。その決定的な行動は、ハッシュ化の前に暗号スイートと拡張機能をソートすることであり、これによりフィンガープリントはChromeの拡張機能の順序ランダム化に対しても安定します。また、JA4は人間が読み取れるようになっています:フィンガープリントは、a_b_c 形式の3つの部分に分けられており、アナリストは単一の不透明なハッシュではなく、任意の部分に基づいてマッチングできます。
例としてフィンガープリント JA4=t13d1516h2_8daaf6152771_02713d6af862 を取り上げます:
aセクション —t13d1516h2は読みやすいメタデータです。tはトランスポート(tは TCP 上の TLS、qは QUIC、dは DTLS)を示し、13は TLS バージョン(1.3)を示します。dは SNI ドメインが存在することを意味し(iは SNI がない、または IP を意味します)、15は暗号スイートの数、16は拡張の数で、どちらも GREASE を除外しています。h2は最初の ALPN 値の最初と最後の文字です。bセクション —8daaf6152771は、暗号スイートの 12 文字の切り捨てられた SHA-256 で、16 進数に変換されてソートされています。cセクション は、拡張の 12 文字の切り捨てられた SHA-256 で、16 進数の値でソートされた後、署名アルゴリズムが続きます。SNI と ALPN の拡張はこの計算から除外されるため、同じクライアントはドメインに接続しても IP に接続しても同じcセクションを保持します。
ソートは JA3 をぶち壊したランダム化を打破します。Chrome の拡張を好きなように並べ替えても、ソートされたリスト — したがって JA4 — は同一です。
JA4+ スイートは TLS 以上のもの
JA4 は TLS クライアントを指紋付けしますが、これはより大きなファミリーの一部です。より広範な JA4+ 指紋付けスイート は接続のいくつかの層をカバーしており、以下を含みます:
| 指紋 | 短い名前 | 識別するもの |
|---|---|---|
| JA4 | JA4 | TLS クライアント |
| JA4Server | JA4S | TLS サーバー応答 |
| JA4HTTP | JA4H | HTTP クライアント |
| JA4X509 | JA4X | X.509 TLS 証明書 |
| JA4SSH | JA4SSH | SSH トラフィック |
| JA4TCP | JA4T | TCP クライアント |
| JA4Latency | JA4L | クライアントからサーバーまでのレイテンシ |
JA4 TLS クライアントメソッドは BSD 3-Clause ライセンスの下でリリースされています。他の JA4+ メソッドは FoxIO License 1.1 の下で運用され、特許出願中です。スクレイパーにとって、JA4(TLS)と JA4H(HTTP)が最も頻繁にリクエストがブラウザとして扱われるかボットとして扱われるかを決定します。
なぜ TLS 指紋付けがスクレイパーをブロックするのか
TLS 指紋付けは、最初からリクエストがブラウザの指紋を提示していないためにスクレイパーをブロックします。 requests、httpx、curl などの HTTP クライアントや、ステルスパッチライブラリは、独自のライブラリの暗号と拡張セットで TLS を交渉します — 実際の Chrome や Firefox では生成されないものです。その結果得られた JA4 は、知られている非ブラウザの値に落ち着き、サーバーはヘッダーがどれだけ信頼できるものであろうとも接続を拒否または挑戦することができます。
これはユーザーエージェントのスプーフィングやプロキシのローテーションが到達できない層です。住宅用 IP から Mozilla/5.0 (… Chrome/126 …) を送信してもフラグが立つ可能性があるのは、下の TLS ハンドシェイクが OpenSSL または Go の crypto/tls によって生成されたためで、Chrome ではないからです。ブラウザの JA4 を手動で一致させることは、その正確な暗号の順序、拡張セット、ALPN を再現することを意味し、そしてブラウザがそれらを変更する際に追従し続けることが必要です。
本物の TLS 指紋を提示する方法
ブラウザの JA4 を提示する確実な方法は、実際にブラウザであることです。Scrapeless Scraping Browser は、実際の自己開発の Chromium であるため、Chrome のスタックで TLS を交渉します。その ClientHello — したがってその JA3 と JA4 — は本物の Chrome のものであり、指紋付けサーバーが普通の訪問者から期待するものです。特にスクレイピングにおいて、それは次のことを提供します:
- 本物の Chromium TLS スタック — 暗号スイート、拡張、および ALPN は Chrome から来ているため、JA4 はスクリプトライブラリではなく、本物のブラウザと一致します。
- 各セッションごとの一貫した指紋 が TLS とブラウザレイヤーの間であり、矛盾する
navigator.webdriverの手がかりはありません。 - 195 カ国での住宅用イーグレス により、IP の評判がブラウザの指紋と一致し、データセンターのアドレスをさらけ出すことはありません。
無料プランの API キーを app.scrapeless.com で取得してください。
無料プランの API キーを取得: app.scrapeless.com
結論:指紋は見た目ではなく、属さなければならない
TLSフィンガープリンティングは、ハンドシェイクからクライアントを読み取るため、耐久性のある答えは、本当にブラウザに属するハンドシェイクだけです。JA3は生のClientHelloをハッシュ化しましたが、Chromeが拡張機能の順序をランダム化したために壊れました。JA4は暗号と拡張機能をソートし、安定を保ちます。これが、現在フィンガープリンティングを行う際に利用される理由です。パッチが当てられたHTTPクライアントはヘッダーを偽装し、IPを回転させることができますが、TLS層で失敗することがあります。本物のChromiumを実行することで、ChromeのTLSスタック、一貫したフィンガープリント、そして住宅用出口が提供され、JA4が通常の訪問者と一致します。この部分はメカニズムに留まります:そのブラウザを通してスクレイピングスタックをルーティングするための運用ワークフローについては、TLSフィンガープリンティングのチェックを回避するガイドを参照してください;関連する検出防止レイヤーについては、Scrapling製品スクレイパーガイドを確認し、Scrapelessの料金ページでプランを比較してください。
ブラウザグレードのTLSフィンガープリントを提示する準備はできていますか?
私たちのコミュニティに参加して無料プランを獲得し、フィンガープリンティングベースの検出に取り組む開発者とつながりましょう:Discord · Telegram。
app.scrapeless.comにサインアップして無料のスクレイピングブラウザランタイムを利用し、本物のChromiumがターゲットが期待するTLSフィンガープリントを提示できるようにしましょう。
FAQ
Q: JA3とJA4の違いは何ですか?
JA3は、元の順序でのClientHelloフィールドのMD5ハッシュです。JA4はハッシュ化の前に暗号スイートと拡張機能をソートし、読みやすいメタデータプレフィックスを追加します。ソートによって、JA4はJA3ハッシュが接続ごとに変化する原因となるTLS拡張順序のランダム化に対して安定します。
Q: ユーザーエージェントを変更することでTLSフィンガープリントを変更できますか?
いいえ。ユーザーエージェントはTLSハンドシェイクの後に送信されるHTTPヘッダーです。TLSフィンガープリントはハンドシェイク自体から導出されます。これらは独立した層であり、偽装されたユーザーエージェントはJA3やJA4に何も影響を与えません。
Q: 住宅用プロキシを使用してもなぜスクレイパーがブロックされるのですか?
住宅用IPはネットワーク層を固定しますが、HTTPクライアントがブラウザ以外の暗号と拡張セットでTLSを交渉する場合、そのJA4は依然としてスクリプトとして識別されます。フィンガープリントとIPは一致する必要があります。
Q: Scrapelessスクレイピングブラウザは私のJA4を偽のChromeに変更しますか?
何も偽装しません — それは本物のChromiumなので、Chromeの実際のスタックでTLSを交渉します。それが提示するJA3/JA4は本物のChromeのものであり、ハンドシェイクは本当にChromeから来ています。
Q: TLSフィンガープリンティングはブラウザフィンガープリンティングと同じですか?
いいえ。TLSフィンガープリンティングはトランスポートハンドシェイク(暗号、拡張機能、ALPN)を読み取りますが、ブラウザフィンガープリンティングはページ内のプロパティ(キャンバス、フォント、navigator値)を読み取ります。信頼できるセッションには、実際のブラウザに見えるために両方が必要です。
Scrapelessでは、適用される法律、規制、およびWebサイトのプライバシーポリシーを厳密に遵守しながら、公開されているデータのみにアクセスします。 このブログのコンテンツは、デモンストレーションのみを目的としており、違法または侵害の活動は含まれません。 このブログまたはサードパーティのリンクからの情報の使用に対するすべての責任を保証せず、放棄します。 スクレイピング活動に従事する前に、法律顧問に相談し、ターゲットウェブサイトの利用規約を確認するか、必要な許可を取得してください。



