最近、特定のセキュリティアプライアンス(BlueCoat)に遭遇しました。これには、インターネットへのall接続がそれを介してプロキシされる必要があるため(こんにちは、man-in-the-middle)、それに応じて使用します。すべてのトラフィックを傍受するための特別なSSL証明書。
これにより、SSL接続自体が機能するように適切なhttp.proxy
およびhttp.sslCAInfo
プロパティが設定されていても、Gitの通常の操作が妨げられました。
環境変数GIT_CURL_VERBOSE=1
を使用すると、git clone
を使用すると、HTTP 407(プロキシ認証が必要)が発生することがわかりました。 Gitはこの認証を適切に実行し、この最後に、アプライアンスはCookieヘッダーSet-Cookie
を含むHTTP 200を返します。
Gitはターゲットサーバーに接続しますが、CookieをせずにHTTP 401に接続します。
これに対する解決策は、git構成オプションhttp.saveCookies=true
を設定することです
質問:中間プロキシがcookieを追加することは、RFC標準で実際に許可されていますか?
Anthony Rich http-stateメーリングリストに同じ質問をした だが、応答はなかった。彼はそのことに注意しました
RFC 2965 HTTP状態管理メカニズム、3.5キャッシングプロキシの役割:プロキシは、プロキシ応答(リクエスト)に独自のSet-Cookie2(Cookie)ヘッダーを導入してはならない(MUST NOT)。
ただし、 RFC 6265に取って代わる では、これについてはまったく触れられていません。
HTTP Cookieは非常に厄介です。実際の基準はありません。 RFCは、その価値のために、実際のユーザーエージェントが何をしているのかを文書化しようとするだけです。
いずれの場合でも、おそらく読み取りたいRFCは RFC 7235 です。これは、プロキシが407ステータスのProxy-Authenticateヘッダーを送信して認証情報を要求することを指定し、これを受信するユーザーエージェントはプロキシの認証情報を含むProxy-Authorizationヘッダーでリクエストを再試行することになっています。
この情報を提供するために、いくつかのチャレンジ/レスポンスメソッドを使用できます。 HTTPを話すほとんどすべてがそれを実装しているため、最も広く使用されているのは「基本」( RFC 7617 )です。
IANAは 既知のHTTP認証スキームのレジストリ を維持します。一般的なルールとして、以前に指定されたHTTPヘッダーを使用するか、非準拠であると記載されています。認証にCookieを使用するものはありません。
プロキシがcookieを追加または変更することが許可されているかどうか、私には言えません。 RFCはこの点についてはあまり明確ではないようです。これは確かに予期しない動作です(特に認証の場合)。そしてBlueCoatは品質が平凡であるという長い歴史があります...