Jetty でアプリケーションを実行しています。その前に、ロードバランサーがあります。要件は、Web コンテナーが SSL クライアント認証のみを行う一方で、ロード バランサーによって SSL 復号化を行うことです。
理論的には、ロード バランサーはコンテンツを非常に効率的に復号化し、それを実行して Web コンテナーに平文で渡すことができるというものです。
これをどのように達成できるか考えていますか?
Jetty でアプリケーションを実行しています。その前に、ロードバランサーがあります。要件は、Web コンテナーが SSL クライアント認証のみを行う一方で、ロード バランサーによって SSL 復号化を行うことです。
理論的には、ロード バランサーはコンテンツを非常に効率的に復号化し、それを実行して Web コンテナーに平文で渡すことができるというものです。
これをどのように達成できるか考えていますか?
タイトルの「Null Cipher」の意味が明確ではありません。、 、 の3 つの候補があります。最初のものは認証を実行せず、いずれも暗号化を提供しません。それらは確かにあなたの目的には役に立ちません。ブラウザーとロードバランサーの間で、通常の暗号スイート (認証と暗号化の両方) を使用します。ロードバランサーとワーカーノード間の暗号化は一般にオプションであり、それらが配置されているネットワークを信頼しない場合にのみ必要です (これはとにかく完全に異なる SSL/TLS 接続であり、クライアント証明書とは何の関係もありません)認証はエンド ブラウザによって行われます)。TLS_NULL_WITH_NULL_NULL
TLS_RSA_WITH_NULL_MD5
TLS_RSA_WITH_NULL_SHA
SSL/TLS サーバーのみが、クライアント証明書認証を要求 (および検証) できます。この場合、これはロード バランサーになります。
SSL/TLS トラフィックをロード バランサーで処理する場合は、証明書を (おそらく構成した CA に対して) 検証してから、証明書情報をワーカー ノードにリレーする必要があります。
これを行う方法は、ロードバランサーによって異なります。Apache Httpd サーバーの場合mod_proxy_ajp
は、AJP プロトコル経由でクライアント証明書を中継します ( SSLOptions +ExportCertData +StdEnvVars
)。mod_jk
必要に応じて、完全なクライアント証明書チェーンを中継することもできます ( JkOptions +ForwardSSLCertChain
)。
を使用する場合は、 のようなものを使用して、HTTP ヘッダー ( )mod_proxy_http
経由で証明書を渡すのがコツです。このヘッダーがクライアントのブラウザーからのものである場合は、このヘッダーがクリアされていることを確認する必要があります (それ以外の場合は偽造される可能性があります)。この場合、Jetty サーバーの一部としてフィルターを記述して、そのヘッダーを処理し、それを属性 (の配列にする必要があります) に配置する必要があります。この後は、多かれ少なかれ AJP の場合と同じ段階にあるはずです。同様の方法で HTTP ヘッダーを設定できる場合、これは他のロード バランサーでも機能する可能性があります。mod_header
RequestHeader set X-ClientCert %{SSL_CLIENT_CERT}s
javax.servlet.request.X509Certificate
HttpServletRequest
X509Certificate