ローカルの stunnel ブリッジで HTTPS プロキシの接続相手を検証する
アプリにはループバック上の平文 HTTP エンドポイントを提供し、実際のプロキシまでの TLS は stunnel で検証します。
[proxy_tls]
client = yes
accept = 127.0.0.1:3129
connect = proxy.example:8443
verifyChain = yes
CAfile = /path/to/trusted-ca-bundle.pem
checkHost = proxy.example
sni = proxy.example接続先のリモートプロキシと、信頼できる CA バンドルを指定します。verifyChain は発行者の証明書チェーンを、checkHost は名前を確認します。sni は名前を送信しますが、検証はしません。
HTTP プロキシクライアントの接続先をローカルエンドポイントにします。
curl --proxy http://127.0.0.1:3129 https://www.example.org/CONNECT と必要なプロキシログインは引き続きアプリが行います。stunnel が追加するのは TLS の区間であり、HTTP 認証ではありません。リモート側のリスナーは、実際に TLS 上の HTTP プロキシとして動作する必要があります。
HTTPS サイトへの接続では、接続先への TLS がこの経路の内側を通り、通常どおり独自に検証されます。2 枚の証明書が識別するのはそれぞれ異なる接続相手です。