HTTPプロキシとHTTPSプロキシ:その表記が意味するもの
HTTPSサイトへトンネル接続できるHTTPプロキシと、プロキシ自体への接続を暗号化するHTTPSプロキシの違いを整理します。
プロキシの待受側で指定されているスキームを使います。HTTPプロキシ一覧から候補を選んだら、クライアントを設定する前に待受側のスキームを確認してください。HTTPSサイトへのアクセスにも http://proxy.example:8080 は使えます。これを https:// に変えると、プロキシへの接続方法そのものが変わります。
| プロキシのURL | サイトのURL | 接続 |
|---|---|---|
http://proxy.example:8080 | http://example.com/ | プロキシにも接続先にも平文のHTTPで接続します。 |
http://proxy.example:8080 | https://example.com/ | プロキシにHTTP CONNECTを送り、そのトンネル内で接続先とのTLS通信を行います。 |
https://proxy.example:8443 | https://example.com/ | プロキシとTLS接続を確立し、その接続内に接続先へのトンネルを通します。 |
CONNECTを許可する通常のHTTP待受であれば、次の指定で整合しています。
curl --proxy http://127.0.0.1:8080 https://example.com/サイトとのTLSハンドシェイクは、プロキシがトンネルを受け入れた後に行われます。待受側が平文HTTPにしか対応していないのにプロキシURLを https:// に変えると、サイトに接続する前にプロキシとのTLSネゴシエーションが失敗することがあります。
プロキシへのTLS接続で何が加わるか
TLS対応プロキシは、CONNECTのやり取りやプロキシ認証を含むクライアント・プロキシ間の通信を、その経路上での受動的な盗聴から保護します。ただし、プロキシの運営者は引き続き接続を処理し、トンネルの宛先も把握しています。この方式にはクライアントと待受側の両方が対応している必要があります。
curl --proxy https://proxy.example:8443 https://example.com/サービスが実際に使用するホスト名を指定してください。証明書はその名前と一致し、信頼されている必要があります。接続先やポートの制限は引き続き適用されます。
両側でHTTPSを使う場合、証明書の検証が二つあります。curlではそれぞれを別々に設定できます。
curl --proxy https://proxy.example:8443 --proxy-cacert proxy-ca.pem --cacert origin-ca.pem https://example.com/--proxy-cacert はプロキシ用、--cacert は接続先用の信頼設定です。必要なら管理者から提供された証明書バンドルを使ってください。システムの信頼設定だけで足りる場合もあります。どちらかを変更する前に、どのハンドシェイクが失敗したのかを切り分けます。
プロキシ一覧の「HTTPS」という表記は、そのエンドポイントがCONNECTテストに合格したことしか示していない場合があります。テスト内容が明示されていなければ、この表記だけでは待受側が http:// と https:// のどちらを想定しているかは分かりません。