0

Ich habe erfolgreich Apache (2.4.7) konfiguriert, um ein Client-Zertifikat zu verlangen und - als Reverse Proxy - die Informationen innerhalb des Zertifikats an einen Tomcat 8 Server weiterzuleiten.Spring Boot Zertifikat Authentifizierung über Apache Reverse Proxy

Beim Versuch, das gleiche mit Frühlings-Boot jedoch zu erreichen, schlägt es mit

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

und gibt einen Fehlercode HTTP 502.

Die relevante, Arbeits Tomcat-Konfiguration ist:

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

Der relevante Teil des Frühlings-Boot-Datei application.properties, die nicht funktionieren:

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 

Beachten Sie, wenn Sie die App den Zugriff auf direkt (dh anfordern https://myapp.company.tld:12345/myapp) es funktioniert gut, aber die Verwendung der Reverse-Proxy (dh https://proxy-load-balancer.company.tld:12345/myapp) wirft den Fehler oben.

Die Port-Unterschied (12345 vs die konfigurierte 8443) ist auf eine Zwischenschicht Docker: sowohl der Reverseproxy und die Anwendung in einem Container ausgeführt und ihre offenen Ports (443 für Apache, 8443 für Tomcat/Spring Boot) sind auf einen anderen Port, z. B. 12345.

Antwort

0

Ok, so das alles aussortiert wurde. Erstens, in diesem Frühjahr Sicherheitseinstellung

server.ssl.client-auth = brauchen

wird immer Kraft Embedded Tomcat für ein Zertifikat zu fragen, so in einem Client => Reverseproxy = > Tomcat Situation Sie können nicht authentifizieren, es sei denn, Sie verwenden AJP, nicht sicher darüber.

Aber es stellte sich heraus, dass

mit

server.ssl.client-auth = wollen

die weitere Bearbeitung Ihrer Anfrage ermöglicht und was in der Regel Menschen tun, ist Prozess das Zertifikat auf der Rückseite Proxy-Level und leiten einige Informationen an den Backend-Server weiter (Tomcat, Jetty, etc.).

Am Ende mussten die Entwickler ihre Spring Boot-Anwendung anpassen, um mit dieser letzteren Betriebsart umzugehen, d.h. Daten aus dem Header der weitergeleiteten HTTP-Anfrage zu extrahieren und mit der darauf basierenden Authentifizierung fortzufahren.

Verwandte Themen