メインコンテンツまでスキップ

1. Introduction (はじめに)

1. Introduction (はじめに)

HTTPSアプリケーションのかなり一般的なデプロイメントパターンは, オリジンHTTPアプリケーションサーバーをクライアントからのTLS接続を終端するリバースプロキシ (reverse proxy) の背後に配置することです。プロキシはインターネットにアクセス可能で, クライアントリクエストをプライベートネットワークまたは保護されたネットワーク内の適切なオリジンサーバーにディスパッチします。オリジンサーバーはクライアントから直接アクセスできず, リバースプロキシを通じてのみ到達可能です。この種のデプロイメントのバックエンドの詳細は, プロキシサーバーにリクエストを行うクライアントにとって通常不透明であり, クライアントはプロキシサーバー自体から発信されたかのようにレスポンスを見ます。プロキシとオリジンサーバーの間でも通常HTTPSが使用されますが, クライアントがHTTPSのために確立するTLS接続は, 自身とリバースプロキシサーバーの間のみです。

このデプロイメントパターンは, n層アーキテクチャ (n-tier architectures), コンテンツ配信ネットワーク (content delivery networks), アプリケーション負荷分散サービス (application load-balancing services), イングレスコントローラー (ingress controllers) などの多数のバリエーションで見られます。

極端に普及しているわけではありませんが, TLSクライアント証明書認証 (TLS client certificate authentication) が採用されることがあり, そのような場合オリジンサーバーはアプリケーションロジックのためにクライアント証明書に関する情報を必要とすることがよくあります。そのようなロジックには, アクセス制御の決定, 監査ログ記録, 発行されたトークン (tokens) やクッキー (cookies) を証明書にバインドすること, およびそのようなバインディングのそれぞれの検証が含まれる場合があります。証明書から必要な具体的な詳細も, アプリケーション要件によって異なります。これらのタイプのアプリケーションデプロイメントが実際に機能するためには, リバースプロキシがオリジンアプリケーションサーバーにクライアント証明書に関する情報を伝達する必要があります。執筆時点では, この情報を伝達する一般的な方法は, オリジンサーバーにディスパッチされるHTTPリクエストで証明書 (何らかのエンコーディング) またはその個々の部分を運ぶために非標準フィールド (non-standard fields) を使用することです。この解決策は機能しますが, 独立して開発されたコンポーネント間の相互運用性は, それぞれ行われた実装選択 (使用または設定可能なフィールド名, 証明書のどの部分が公開されるか, または証明書がどのようにエンコードされるかなど) に応じて, 煩雑または不可能な場合さえあります。この一般的に発生する機能に対する広く知られた予測可能なアプローチは, 独立した実装間の相互運用性を改善および簡素化する可能性があります。

この文書の範囲は, 改善されたより低接触の相互運用性を促進するのに十分な具体的な詳細を成文化しながら, 既存の実践を記述することです。したがって, この文書は2つのHTTPヘッダーフィールド, "Client-Cert" と "Client-Cert-Chain" を記述します。これらはTLS終端リバースプロキシ (TLS Terminating Reverse Proxy, TTRP) がバックエンドオリジンサーバーに送信するリクエストに追加します。Client-Certフィールド値には, 発信クライアントとTTRP間の相互認証されたTLS接続からのエンドエンティティクライアント証明書 (end-entity client certificate) が含まれます。オプションで, Client-Cert-Chainフィールド値には, エンドエンティティ証明書の検証に使用される証明書チェーン (certificate chain) が含まれます。これにより, バックエンドオリジンサーバーはアプリケーションロジックでクライアント証明書情報を利用できます。TTRPとオリジンサーバーの間に追加のプロキシまたはホップ (hops) が存在する可能性がありますが (それらの間で相互認証されたTLS接続が存在する可能性さえあります), Client-Certヘッダーフィールドの範囲は, 発信クライアントがTTRPへの接続で提示した証明書をオリジンサーバーに公開することに意図的に限定されています。