0

私の質問を要約すると:

Jbossの前にApacheWebサーバーがあります。以下は、Httpdconfのssl部分です。

ProxyRequests Off
SSLProxyEngine on

SSLCertificateFile 
/FinMgmt/deploy/https/certs/webserver/fm.insurance.co.uk_a_cert.pem
SSLCertificateKeyFile
/FinMgmt/deploy/https/certs/webserver/fm.insurance.co.uk_a_key.pem

SSLCACertificateFile       
/FinMgmt/deploy/https/certs/fm.insurance.co.uk_CA_cert.pem
SSLVerifyClient optional_no_ca
SSLOptions +ExportCertData
ProxyPass /webapp1 https://fm.insurance.co.uk:8443/webapp1
ProxyPassReverse /webapp1 https://fm.insurance.co.uk:8443/webapp1
ProxyPass /webapp2 https://fm.insurance.co.uk:8443/webapp2
ProxyPassReverse /webapp2 https://fm.insurance.co.uk:8443/webapp2

以下は、jbossserver.xmlのssl部分です。

    <!-- SSL/TLS Connector configuration using the admin devl guide keystore clientAuth=false -->
    <Connector port="8443" protocol="HTTP/1.1" SSLEnabled="true"
    maxThreads="500" scheme="https" secure="true"
    clientAuth="false" sslProtocol="TLS"
    keystoreFile="${jboss.server.home.dir}/conf/server.keystore"
    keystorePass="glamdev"
    truststoreFile="${jboss.server.home.dir}/conf/server.truststore"

    truststorePass="passwd"/>

私の理解によると、ApacheはSSLVerifyClient option_no_caとの双方向相互認証を使用するように構成されています。これは、クライアントが証明書を提供する場合と提供しない場合があることを意味します。

これで、jbossは一方向SSL認証に設定されました。私が理解しているのは、ブラウザがリクエストapacheを送信すると、apacheは証明書で応答し、ブラウザはルートCAを使用して認証を試みるか、ユーザーに保存を求める例外をスローすることです。

また、apacheがリクエストをjbossにルーティングする場合、ここでapacheはクライアントとして機能し、jbossはSSLサーバーとして機能します。jbossはキーストアから証明書を送信します。これは、SSLCACertificateFileディレクティブを使用してApacheによって検証されます。

また、jbossがそれ自体にリダイレクトする必要がある場合は、proxyPassReverseを設定したため、リバースプロキシを経由する必要があります。その場合、jbossはSSLクライアントとして機能し、Apache httpはSSLサーバーとして機能し、Apacheはjbossが使用して検証する証明書を送信します。 trustoreのCA証明書。私は設定ファイルを解釈するのに正しいですか?

また、SSLVerifyClientでのoptional_no_caの使用を正確に理解していません。apacheはブラウザーに証明書を要求するかどうか、またはブラウザーによって異なりますか?

実際、私はこのアプリケーションをドキュメントなしで継承しており、それを理解するために一生懸命努力しています。

4

1 に答える 1

2

あなたが求めているのは、JBossアプリケーションでクライアント証明書認証を使用してブラウザーを認証することだと思います(JBossのクライアントとしてのApache Httpdではありません)。

JBossコンテナの前でリバースプロキシとしてApacheHttpdを使用する場合は、クライアント証明書認証を要求および処理するようにApacheHttpdを設定する必要があります。特に、の一部であるそのSSLCA*andSSLVerifyClientディレクティブを使用する必要がありmod_sslます。

ApacheHttpdとJBossワーカーノードの間でSSL/TLSを設定するかどうかは独立しています。その時点で信頼できるネットワークを使用している場合は、多くの場合不要です。そこでSSL/TLSが必要な場合は、Apache HttpdのSSLProxy*ディレクティブを使用して、信頼するCAを構成します。そうは言っても、クライアント証明書情報の出所があいまいになるため、アプリケーション内で混乱が生じることは間違いありません。JBossコンテナレベルでの実際のクライアント証明書認証、またはリレーされた証明書、 ApacheHttpdによって処理されます。

実際、この回答で説明されているように、詳細については、クライアント証明書情報をコンテナに渡す必要があります。


代わりに、Apache HttpdとJBoss間のクライアント証明書認証が必要な場合は、この接続をSSL / TLSで保護し、リバースプロキシ(証明書を提示する)からのものかどうかを確認する必要があります。SSLProxyMachineCertificateFileApacheHttpd2.4で利用可能なものを使用してこれを行うことができるはずです。(この構成は確かに珍しいです。)


編集:(質問への変更に続いて。)

私の理解によると、ApacheはSSLVerifyClient option_no_caとの双方向相互認証を使用するように構成されています。これは、クライアントが証明書を提供する場合と提供しない場合があることを意味します。

SSLVerifyClient optional_no_caつまり、Apache Httpdは、クライアントが提示する証明書の秘密鍵を持っていることだけをチェックします。証明書が信頼されている(SSLCACertificateFile役に立たない)ことを検証しません。証明書の提示をオプションにしたいが、それでもPKIに対して検証する場合は、SSLVerifyClient optional(with SSLCACertificateFile)を使用します。

これで、jbossは一方向SSL認証に設定されました。私が理解しているのは、ブラウザがリクエストapacheを送信すると、apacheは証明書で応答し、ブラウザはルートCAを使用して認証を試みるか、ユーザーに保存を求める例外をスローすることです。

はい。ブラウザとApacheHttpd間の接続はJBossとは何の関係もありません。

また、apacheがリクエストをjbossにルーティングする場合、ここでapacheはクライアントとして機能し、jbossはSSLサーバーとして機能します。jbossはキーストアから証明書を送信します。これは、SSLCACertificateFileディレクティブを使用してApacheによって検証されます。

いいえ、それはSSLProxyCACertificateFile(または...Path

また、jbossがそれ自体にリダイレクトする必要がある場合は、proxyPassReverseを設定したため、リバースプロキシを経由する必要があります。その場合、jbossはSSLクライアントとして機能し、Apache httpはSSLサーバーとして機能し、Apacheはjbossが使用して検証する証明書を送信します。 trustoreのCA証明書。私は設定ファイルを解釈するのに正しいですか?

どのような状況でJBossが「それ自体にリダイレクト」するのか(またはこれが何を意味するのか)はわかりません。ここでは、JBossがクライアントとしての役割を果たしていることを示唆するものは何もありません。これはのためのものProxyPassReverseではありません。

また、SSLVerifyClientでのoptional_no_caの使用を正確に理解していません。apacheはブラウザーに証明書を要求するかどうか、またはブラウザーによって異なりますか?

、またはに設定SSLVerifyClientすると、サーバーは証明書を要求します。を使用すると、クライアントが接続を送信しない場合(信頼できる場合)、接続が終了します。optionaloptional_no_carequirerequire

構成が現状では、クライアント証明書がJBossコンテナーに伝達されることを示唆するものは何もありません。Apache Httpdレベルでは検証されていません(自己署名クライアント証明書を持っている人は誰でもここに接続できます)。原則としてoptional_no_ca、任意の証明書を通過させ、Javaコンテナーに到着した後でのみ検証することができますが、JBossアプリケーションでこれを行うには確かに追加のカスタムコードが必要になります。また、証明書自体を何らかの方法で伝達する必要があります(たとえばmod_header、カスタムヘッダーを介して、またはより直接使用しmod_proxy_ajpます。また、最初に提示された証明書が正しくない場合、接続を切断してクライアントに別の証明書を試行させることも困難になります。

于 2012-07-29T19:40:44.533 に答える