0

Apache(2.4.7)でクライアント証明書を要求し、リバースプロキシとして - 証明書内の情報をTomcat 8サーバーに転送するように設定しました。 Apacheリバースプロキシ経由でのスプリングブート証明書の認証

春ブーツと同じ達成しようしかし、

The proxy server received an invalid response from an upstream server 
The proxy server could not handle the request GET /myapp 

で失敗し、HTTP 502エラーコードを返します。

関連、作業Tomcatの設定は次のとおりです。直接アプリにアクセスするとき、

server.context-path=/myapp 
server.port=8443 
server.ssl.enabled=true 
server.use-forward-headers=true 
server.ssl.protocol=TLS 
server.ssl.client-auth=need 
server.ssl.key-alias=myalias 
server.ssl.key-store=/path/to/mykeystore.jks 
server.ssl.key-store-password=mypassword 
server.ssl.key-password=mypassword 
server.ssl.trust-store=/path/to/mykeystore.jks 
server.ssl.trust-store-password=mypassword 

server.tomcat.remote-ip-header=x-forwarded-for 
server.tomcat.port-header=x-forwarded-port 

注:

<Connector SSLEnabled="true" clientAuth="want" keyAlias="myalias" 
keystoreFile="mystore.jks" keystorePass="mypassword" maxThreads="150" 
port="8443" protocol="HTTP/1.1" scheme="https" secure="true" 
sslProtocol="TLS" truststoreFile="mystore.jks" truststorePass="mypassword"/> 

春ブーツの関連部分が動作しませんファイルをapplication.properties (つまり、https://myapp.company.tld:12345/myappを要求しています)うまく動作しますが、リバースプロキシ(すなわちhttps://proxy-load-balancer.company.tld:12345/myapp)を使用すると上記のエラーが発生します。

ポートの違い(12345と構成された8443)は、中間のDockerレイヤーによるものです。リバースプロキシとアプリケーションは両方ともコンテナ内で実行され、開いているポート(Apacheでは443、Tomcat/Spring Bootでは8443)別のポート(12345)にマッピングされています。

答えて

0

これですべてが整理されました。まず、この春のセキュリティserver.ssl.client-AUTH

を設定=

を必要とするが常に力あなたの埋め込まれたTomcatは、=ので、クライアント=>リバースプロキシでは、証明書を求めることになります> Tomcatの状況では、AJPを使用しない限り認証できません。

しかし、それは

server.ssl.client-AUTHを使用して=

をしたいことは、あなたの要求とどのような人々が通常行うの更なる処理は逆に証明書を処理で可能となることが判明しましたプロキシレベルを作成し、バックエンドサーバー(Tomcat、Jettyなど)に情報を転送します。

最終的に、開発者はSpringブートアプリケーションをこの後者の操作モードに対応する、つまり、転送されたHTTP要求のヘッダーからデータを抽出し、それに基づいて認証を進める必要がありました。

関連する問題