本文へスキップ
ネットワーク · JA3 · JA4 · HTTP/2

TLS フィンガープリントを、ユーザーエージェントに揃える

ページが JavaScript を実行するより前に、TLS ハンドシェイクはすでにクライアントの素性を伝えています。Clearcote のハンドシェイクは Chromium 自身のもので、Chrome のバージョン間で変わる一部のフィールドはペルソナが名乗るバージョンに従います。そのため、ネットワーク層とユーザーエージェントの言い分が一致します。

すべてのプランで、デフォルトで有効。設定は一切不要です。

デフォルトのままで正しい設定

import { launch } from "clearcote";

// default: the ClientHello follows the persona's claimed Chrome major
const browser = await launch({ fingerprint: "account-42", tlsProfile: "match-persona" });

// or pin a major (only together with a matching brandVersion), or leave the build's own TLS untouched:
//   tlsProfile: "chrome-150"
//   tlsProfile: "native"

主なポイント

Chromium 自身のハンドシェイク

Chrome に同梱されているとおりの BoringSSL です。暗号スイートのリスト、バージョンの範囲、接続ごとの拡張の順序は、再実装ではなく本物です。

名乗るバージョンに追従

ポスト量子暗号の鍵共有グループや ALPS のコードポイントなど、最近の Chrome メジャーバージョン間で異なるフィールドは、ビルド自身の値のままではなく、名乗っているメジャーバージョンに従います。

レイヤー間に継ぎ目なし

JavaScript から見える部分とハンドシェイクは同じひとつのブラウザから来るので、パッチしたユーザーエージェントとパッチしていないネットワークスタックが食い違うことはありません。

HTTP/2 も同じスタックから

SETTINGS、ウィンドウ更新、ヘッダーの順序は、別のクライアントライブラリではなく、Chromium 自身の HTTP/2 実装から来ます。

ブランドはヘッダーに

Edge、Opera、Vivaldi は Chromium のハンドシェイクを共有しています。ブランドを伝えるのは ClientHello ではなく、ユーザーエージェントと Client Hints です。

設定可能、ただし必要になることはまれ

ほとんどの人にはデフォルトで十分です。このオプションは、ブランドバージョンと矛盾するバージョンを固定してしまわないためにあります。

ハンドシェイクが重要な理由

TLS フィンガープリント(JA3 と、その後継の JA4)は ClientHello を要約したものです。クライアントがどのバージョン、暗号、拡張、グループを、どのような形で提示するかを表します。HTTP/2 にはさらに別のレイヤーがあります。SETTINGS フレーム、ウィンドウサイズ、疑似ヘッダーの順序です。どちらもスクリプトが実行される前にサーバー側で読み取られ、ユーザーエージェントとの照合も低コストで行えます。

多くの自動化スタックがほころびを見せるのが、まさにこの照合です。Chrome のユーザーエージェントを付けた HTTP ライブラリも、送るのはそのライブラリ自身のハンドシェイクですし、JavaScript のステルスレイヤーはページが読み取る内容を変えても、ネットワークが送った内容までは変えません。Clearcote は端から端まで Chromium なので、その下に第二のクライアントは存在しません。

Clearcote が加えるのは、バージョンの整合性です。Chrome はリリースのたびに、ハンドシェイクの細部をいくつか変更します。ペルソナが実行中のビルドとは異なる Chrome バージョンを名乗る場合、match-persona はそれらのフィールドだけを名乗ったメジャーバージョンに合わせ、それ以外はすべて Chromium が生成したままにします。

偽装したユーザーエージェントと Clearcote の比較

ユーザーエージェントを偽装した自動化
Clearcote
ハンドシェイク
下で動くブラウザや HTTP ライブラリのもの
Chromium 自身の BoringSSL
UA が Chrome X を名乗る場合
ハンドシェイクは実際に動いているバージョンのもの
バージョン依存のフィールドはデフォルトで Chrome X に従う
HTTP/2 の SETTINGS とヘッダー順
下で動くクライアントのもの
Chromium の HTTP/2 スタックから
UA を変更する場所
ヘッダーの上書きか、注入したスクリプト
エンジン内で、Client Hints と一緒に

主な用途

ハンドシェイクを評価するサイト

多くのエッジネットワークは、ページが読み込まれる前に JA3 や JA4 を読み取ります。整合性のあるハンドシェイクなら、矛盾が 1 つ減ります。

自分で設定したブランドバージョン

Chrome や Edge のペルソナで brandVersion を設定すると、バージョンに依存する主なハンドシェイクのフィールドがそれに従います。ただし、ブラウザのそれ以外の部分は引き続きエンジンの実際のバージョンを報告するため、brandVersion を設定しないのが整合性のあるデフォルトであることに変わりはありません。

ネットワークの研究

同じバイナリで、バージョンに依存するハンドシェイクのフィールドが Chrome のメジャーバージョンごとにどう変わるかを比較します。

Clearcote は、プライバシー保護、テスト、研究、合法的な自動化のために作られています。どう使うか、そしてアクセスするサイトの規約を守ることは、利用者ご自身の責任です。

対象プラン

すべてのプランで、デフォルト設定のまま利用できます。

プランを比較

よくある質問

JA3 / JA4 フィンガープリントとは何ですか?

クライアントの TLS ClientHello を簡潔に要約したもので、バージョン、暗号スイート、拡張、サポートするグループが含まれます。サーバーはこれを使って、ブラウザと HTTP ライブラリを見分けたり、クライアントがユーザーエージェントの名乗るとおりのものかを確かめたりします。JA3 と JA4 に関する Q&A もご覧ください。

Clearcote は TLS フィンガープリントをランダム化しますか?

いいえ。ランダムなハンドシェイクはどの実在のブラウザとも一致しないため、かえって簡単に見分けられてしまいます。Chrome 自体は接続のたびに TLS 拡張の順序をシャッフルしており、Clearcote はその挙動を Chrome とまったく同じ形で維持しています。

Edge や Opera のペルソナにすると ClientHello は変わりますか?

いいえ。これらのブラウザの中身は Chromium で、ハンドシェイクも共通です。ブランドはユーザーエージェント、Client Hints、ヘッダーで伝えられ、Clearcote もそこで設定します。

tlsProfile を変更するのはどんなときですか?

変更が必要になることはほとんどありません。match-persona は、名乗っているブランドバージョンにすでに追従しています。chrome-<major> で固定するのはブランドバージョンを別の方法で設定した場合だけにし、ビルドのハンドシェイクをコンパイルされたままにしたいときは native を使ってください。

ドキュメントで詳しく

関連する機能

Clearcote を試す

Playwright & Puppeteer にそのまま組み込め、TLS ハンドシェイクまで整合性を保ちます。まずはオープンソースのビルドから始められます。

GitHub があればブラウザ 1 つまで無料。カード登録は不要です。