Squid経由のWSSは単純なWebSocketアップグレードと同じではない
CONNECT内の暗号化されたWebSocketと、フォワードプロキシにおける平文HTTP Upgradeの処理を区別します。
SquidはHTTP Upgradeリクエストを見ているのか、それとも暗号化されたトラフィックを運ぶトンネルだけを見ているのか。これが、HTTP Upgrade制御が障害に対処できるかを決めます。
| 通常の明示的プロキシ経路 | Squidが接するもの |
|---|---|
wss:// | 通常はCONNECT、その後WebSocketハンドシェイクを運ぶ宛先TLS |
ws:// | プロキシが処理できる平文のHTTP Upgradeリクエスト |
Squidのアップグレード制御は、Squidが処理するリクエストに関係します。通常の不透明なWSSトンネル内の暗号化されたHTTPヘッダーを明らかにするものではありません。TLS傍受やその他の特別なプロキシ処理は可視性を変え、独自の互換性要件を持ち込むことがあります。
WSSでは、どこで手順が止まるかを見極めます。プロキシへの接続、受け入れられたCONNECT、検証されたTLS、そしてアプリケーションのハンドシェイクです。TLSより前の拒否は、拒否された平文Upgradeリクエストとは別の障害です。
アップグレードポリシーの変更が必要な場合は、インストールされているSquidリリースのディレクティブを使い、必要な動作だけを明示的に許可してください。すべてのアップグレードプロトコルを許可すると、ポリシーが対象アプリケーションを超えて広がります。
HTTPSページの取得に成功しても、経路の一部が確立したにすぎません。長時間のWebSocketトラフィックは、同じホスト名でもアプリケーション要件、接続の寿命、中間装置の制限によって失敗することがあります。