Apache リバース プロキシを介した Spring Boot 証明書の認証

ディッペル

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

ただし、Spring Bootで同じことを達成しようとすると、失敗します

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

HTTP 502 エラー コードを返します。

関連する有効な Tomcat 構成は次のとおりです。

<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"/>

機能しない Spring Boot application.properties ファイルの関連部分:

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

アプリに直接アクセスする場合 (つまり、https://myapp.company.tld:12345/myappを要求する場合) は問題なく動作しますが、リバース プロキシ (つまり、https://proxy-load-balancer.company.tld: 12345/myapp ) は上記のエラーをスローします。

ポートの違い (12345 と構成済みの 8443) は、中間の Docker レイヤーが原因です。リバース プロキシとアプリケーションの両方がコンテナーで実行され、それらの開いているポート (Apache の場合は 443、Tomcat/Spring Boot の場合は 8443) が別のポート、つまり 12345。

ディッペル

よし、これで全て解決。まず、このSpringセキュリティ設定

server.ssl.client-auth=必要

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

しかし、それを使用することが判明しました

server.ssl.client-auth=欲しい

リクエストをさらに処理できるようになります。通常、人々が行うことは、リバース プロキシ レベルで証明書を処理し、一部の情報をバックエンド サーバー (Tomcat、Jetty など) に転送することです。

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

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

OpenIDConnectを介した認証とLDAPを介した認証を備えたApache2リバースプロキシ

分類Dev

Spring BootアプリでのLDAP認証

分類Dev

SpringブートなしのSpringでの証明書を使用したクライアント認証

分類Dev

Apacheリバースプロキシを介したSocket.ioの実行

分類Dev

ローカルApacheサーバーのSSL証明書

分類Dev

Spring BootアプリケーションでのアクティブMQキューを使用したApache Camel Routing

分類Dev

サーバーApacheがクライアント証明書を要求したときにFirefoxが証明書リストの表示を拒否しましたか?

分類Dev

Spring Bootセキュリティ、JWT認証サーバー間

分類Dev

Spring-Bootでの自己署名証明書

分類Dev

証明書ベースの認証でsshを使用する

分類Dev

Apache CXF + Spring:単純な証明書認証

分類Dev

Spring Boot2セキュリティの基本認証

分類Dev

さまざまなSSLクライアント認証証明書を使用してApache HttpClientのプールを作成する方法

分類Dev

Spring RESTサービス証明書認証

分類Dev

cURLを介したプッシュキット通知の送信-curl:(60)SSL証明書の問題:ローカル発行者証明書を取得できません

分類Dev

Spring Boot-フラグに応じてローカルDBまたはActive Directoryを介した認証

分類Dev

Spring Boot 2.1.9でSSL証明書を構成する方法

分類Dev

GrailsでのRESTful証明書ベース(X509)ログイン認証

分類Dev

Spring Boot ZuulServiceルートにアクセスするための認証

分類Dev

SSL証明書ベースの認証を使用するm2e

分類Dev

Apache Camelを介したrabbitmqへのSpring boot 2接続

分類Dev

Spring Boot-JWT、OAuth、および個別のリソースサーバーと認証サーバーの使用

分類Dev

P7B証明書を使用してSpring Boot JavaアプリケーションでHTTPSを有効にする

分類Dev

Spring SAMLセキュリティ証明書キャッシュの問題

分類Dev

認証用の証明書をリポジトリに追加する方法

分類Dev

証明書なしでHTTPSリクエストをHTTPにリダイレクトし(Apache VirtualHosts)、証明書の警告を回避する方法

分類Dev

ユーザー認証にX509証明書の拇印を使用する

分類Dev

さまざまなタイプのユーザーのSpring Boot認証

分類Dev

PEMエンコードされた証明書からSSL証明書の有効期限を確認する方法

Related 関連記事

  1. 1

    OpenIDConnectを介した認証とLDAPを介した認証を備えたApache2リバースプロキシ

  2. 2

    Spring BootアプリでのLDAP認証

  3. 3

    SpringブートなしのSpringでの証明書を使用したクライアント認証

  4. 4

    Apacheリバースプロキシを介したSocket.ioの実行

  5. 5

    ローカルApacheサーバーのSSL証明書

  6. 6

    Spring BootアプリケーションでのアクティブMQキューを使用したApache Camel Routing

  7. 7

    サーバーApacheがクライアント証明書を要求したときにFirefoxが証明書リストの表示を拒否しましたか?

  8. 8

    Spring Bootセキュリティ、JWT認証サーバー間

  9. 9

    Spring-Bootでの自己署名証明書

  10. 10

    証明書ベースの認証でsshを使用する

  11. 11

    Apache CXF + Spring:単純な証明書認証

  12. 12

    Spring Boot2セキュリティの基本認証

  13. 13

    さまざまなSSLクライアント認証証明書を使用してApache HttpClientのプールを作成する方法

  14. 14

    Spring RESTサービス証明書認証

  15. 15

    cURLを介したプッシュキット通知の送信-curl:(60)SSL証明書の問題:ローカル発行者証明書を取得できません

  16. 16

    Spring Boot-フラグに応じてローカルDBまたはActive Directoryを介した認証

  17. 17

    Spring Boot 2.1.9でSSL証明書を構成する方法

  18. 18

    GrailsでのRESTful証明書ベース(X509)ログイン認証

  19. 19

    Spring Boot ZuulServiceルートにアクセスするための認証

  20. 20

    SSL証明書ベースの認証を使用するm2e

  21. 21

    Apache Camelを介したrabbitmqへのSpring boot 2接続

  22. 22

    Spring Boot-JWT、OAuth、および個別のリソースサーバーと認証サーバーの使用

  23. 23

    P7B証明書を使用してSpring Boot JavaアプリケーションでHTTPSを有効にする

  24. 24

    Spring SAMLセキュリティ証明書キャッシュの問題

  25. 25

    認証用の証明書をリポジトリに追加する方法

  26. 26

    証明書なしでHTTPSリクエストをHTTPにリダイレクトし(Apache VirtualHosts)、証明書の警告を回避する方法

  27. 27

    ユーザー認証にX509証明書の拇印を使用する

  28. 28

    さまざまなタイプのユーザーのSpring Boot認証

  29. 29

    PEMエンコードされた証明書からSSL証明書の有効期限を確認する方法

ホットタグ

アーカイブ