0

Jetty でアプリケーションを実行しています。その前に、ロードバランサーがあります。要件は、Web コンテナーが SSL クライアント認証のみを行う一方で、ロード バランサーによって SSL 復号化を行うことです。

理論的には、ロード バランサーはコンテンツを非常に効率的に復号化し、それを実行して Web コンテナーに平文で渡すことができるというものです。

これをどのように達成できるか考えていますか?

4

1 に答える 1

6

タイトルの「Null Cipher」の意味が明確ではありません。、 、 の3 つの候補があります。最初のものは認証を実行せず、いずれも暗号化を提供しません。それらは確かにあなたの目的には役に立ちません。ブラウザーとロードバランサーの間で、通常の暗号スイート (認証と暗号化の両方) を使用します。ロードバランサーとワーカーノード間の暗号化は一般にオプションであり、それらが配置されているネットワークを信頼しない場合にのみ必要です (これはとにかく完全に異なる SSL/TLS 接続であり、クライアント証明書とは何の関係もありません)認証はエンド ブラウザによって行われます)。TLS_NULL_WITH_NULL_NULLTLS_RSA_WITH_NULL_MD5TLS_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_headerRequestHeader set X-ClientCert %{SSL_CLIENT_CERT}sjavax.servlet.request.X509Certificate HttpServletRequestX509Certificate

于 2012-07-28T01:49:18.887 に答える