Chromeがプロキシのユーザー名とパスワードを何度も尋ねる理由
目次

要点: Chromeがプロキシのログインダイアログを表示するのは、プロキシがステータス407、Proxy Authentication Requiredを返したときです。Chromeはプロキシ設定や起動フラグから認証情報を取得しないので、ダイアログに入力するか、拡張機能が代わりに渡すことになります。ログインした後にダイアログが戻ってくる場合、ほとんどはプロキシが送られた内容を拒否したことを意味します。パスワードが必要なSOCKS5プロキシはChromeでは動きません。ChromeはSOCKS5の認証を実装していないからです。
Chromeがプロキシのユーザー名とパスワードを何度も尋ねるのは、Chromeがほかの方法では応答できないログインをプロキシが求めているときです。この問題の背後には四つの状況があり、そのうち三つはChromeの中で解決できます。四つめのパスワード付きSOCKS5プロキシには、プロキシ側の変更か、別のブラウザが必要です。
プロキシのログインダイアログは何を意味しますか?
プロキシが、お客様がログインするまでリクエストの転送を拒否したということです。HTTPの用語でいえば、プロキシはステータス407、Proxy Authentication Requiredを返しました。RFC 9110はこれを「このリクエストでプロキシを使うには、クライアントが自らを認証する必要がある」という意味だと説明しています。プロキシは受け付けるログイン方式を示し、ブラウザは認証情報を付けてリクエストを繰り返すことができます。
Chromeは「Sign in」(ログイン)というタイトルのダイアログで認証情報を受け取ります。Chromiumのダイアログ文字列にある英語の文言は「The proxy $1 requires a username and password.」(プロキシ$1にはユーザー名とパスワードが必要です)で、$1の部分にプロキシのアドレスが入ります。HTTPプロキシについて、ChromeはBasic、Digest、Negotiate、NTLMの各方式に対応しており、Chromiumのプロキシに関するメモに一覧があります。
Chromeがプロキシのパスワードを何度も尋ねるのはなぜですか?
最も多いのは、プロキシが認証情報を拒否して新たに407を返したため、Chromeがもう一度尋ねるケースです。パスワードの誤り、末尾に空白が付いたままコピーしたユーザー名、事業者が停止したアカウントは、ブラウザ側からはどれも同じに見えます。
パスワードがChromeの読まない場所(プロキシ設定など)にある場合や、パスワードを保存している拡張機能に応答の許可が与えられていない場合にも、ダイアログは戻ってきます。パスワード付きのSOCKS5プロキシは振る舞いが異なり、Chromeはダイアログを表示せず、接続は失敗します。「ご自身のケースを探す」の表に、四つの状況とそれぞれの対処をまとめています。
プロキシ設定にあるパスワードが無視されるのはなぜですか?
Chromeは、プロキシ設定に書き込まれた認証情報を読みません。多くのシステムでは、そこにユーザー名とパスワードを入力したり、アドレスにuser:password@host:portとして書き込んだりできますが、Chromiumのプロキシに関するメモははっきりと「Chromeはこれを実装しておらず、プロキシ設定に埋め込まれた認証情報は一切使用しない」と述べています。認証は通常のログインの流れを通り、ほとんどの人にとってその流れとはダイアログのことです。
--proxy-server起動フラグで設定したプロキシも手動設定の入力方法の一つなので、フラグに書き込んだパスワードも効果がありません。
拡張機能はどのようにダイアログに代わって応答しますか?
Chromeでは、ダイアログが表示される前に、拡張機能がプロキシのログイン要求に応答できます。webRequest APIはonAuthRequiredイベントを発生させ、要求しているのがプロキシであればそのisProxyフラグがtrueになります。webRequestAuthProvider権限を持つ拡張機能は、ユーザー名とパスワードで応答できます。
当社の無料のProxyJam Connectorはこのイベントを使います。プロキシのプロファイルごとにユーザー名とパスワードを保存しておくと、拡張機能は、ホストとポートが要求してきたプロキシと一致する保存済みのプロキシについて応答します。
- Chromeでは、設定ページでネットワークアクセスを許可すると応答するようになります。それまでは通常どおりブラウザ自身のダイアログが表示されます。
- 同じリクエストに対してプロキシが認証情報を2回拒否すると、Connectorは再試行をやめ、ツールバーのバッジにAUTHと表示します。
- 応答するのはHTTPとHTTPSのプロキシです。ユーザー名とパスワードを設定したSOCKS5のプロファイルには警告が表示されます。Chromeはそれらを使えないからです。
ChromeでパスワードのあるSOCKS5プロキシを使えますか?
使えません。Chromiumのプロキシに関するメモには「ChromeではSOCKSv5の認証方式は一切サポートされていない(プロトコルにはいくつか存在するが)」とあり、SOCKS4にもありません。ChromeのSOCKS5クライアントはプロキシに認証情報の要らない方式しか提示しないので、パスワードを必須とするプロキシは接続を拒否します。拡張機能のAPIにも、拡張機能が応答できるSOCKSのログインのイベントはありません。
うまくいく方法は次のとおりです。
- ご自身のアドレスを事業者に登録する。 プロキシ事業者の中には、お客様が伝えたIPアドレスの一覧からの接続を、パスワードなしで受け入れられるところがあります。
- 事業者のHTTPエンドポイントを使う。 同じプロキシがHTTPの接続も受け付けるなら、Chromeはダイアログか拡張機能を通じてログインできます。
- そのプロキシにはFirefoxを使う。 Firefoxの拡張機能APIは、SOCKSプロキシにユーザー名とパスワードを渡せます(MDNのProxyInfoリファレンス)。ConnectorのFirefox版はこれを使っており、Firefox Add-onsからインストールできます。
次に読むもの
パスワードが必要な複数のプロキシを切り替えて使うなら、それぞれの認証情報を保存する拡張機能が、HTTPとHTTPSについて代わりに応答します。ConnectorがChromeで行うことは拡張機能のページにまとめています。そうしたプロキシに一部のサイトだけを通す方法は、一部のサイトだけをプロキシ経由にするを参照してください。すべての切り替えツールに関わる拡張機能の規則の変更は、Manifest V3がプロキシ拡張機能の何を変えたかにあります。
Connectorで使うプロキシを選んでいるなら、ISPプロキシとは何かをお読みください。ProxyJamは静的レジデンシャル(ISP)プロキシをISPプロキシのページで販売しており、価格は料金ページにあります。
