Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/apache/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
通过Apache反向代理进行Spring引导证书身份验证_Apache_Tomcat_Spring Boot_Reverse Proxy_Ssl Client Authentication - Fatal编程技术网

通过Apache反向代理进行Spring引导证书身份验证

通过Apache反向代理进行Spring引导证书身份验证,apache,tomcat,spring-boot,reverse-proxy,ssl-client-authentication,Apache,Tomcat,Spring Boot,Reverse Proxy,Ssl Client Authentication,我已经成功地将Apache(2.4.7)配置为需要客户端证书,并作为反向代理将证书中的信息转发给Tomcat8服务器 然而,当试图用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配置为:

我已经成功地将Apache(2.4.7)配置为需要客户端证书,并作为反向代理将证书中的信息转发给Tomcat8服务器

然而,当试图用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"/>
请注意,当直接访问应用程序(即请求)时,它工作正常,但使用反向代理(即)会抛出上述错误


端口差异(12345与配置的8443)是由中间Docker层造成的:反向代理和应用程序都在容器中运行,它们打开的端口(443用于Apache,8443用于Tomcat/Spring Boot)映射到不同的端口,即12345。

好,所以这一切都得到了解决。首先,今年春天的安全设置

server.ssl.client auth=need

始终强制嵌入式Tomcat请求证书,因此在客户端=>反向代理=>Tomcat的情况下,除非您使用AJP,否则您将无法进行身份验证,对此不确定

但事实证明,使用

server.ssl.client auth=want

允许进一步处理您的请求,人们通常在反向代理级别处理证书,并将一些信息转发到后端服务器(Tomcat、Jetty等)


最后,开发人员必须调整他们的Spring Boot应用程序来处理后一种操作模式,即从转发的HTTP请求的头中提取数据,并在此基础上进行身份验证。

如果Apache的反向代理正在请求客户端证书,为什么要在Tomcat级别配置
truststoreFile
?。
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