Apache 2.4代理服务器获取客户端身份validation,但不传递给Tomcat

我以前已经有Apache 2.2.17作为反向代理运行,它将请求客户端authentication(使用SSLVerifyClient),并将authentication传递给jetty / tomcat应用程序servlet引擎。 然后我的Java应用程序会从请求中读取这个信息(x509Certificate)。

当升级到新服务器时,我们决定迁移到最新版本的Apache,但这个过程似乎不再起作用。 Apache仍然要求客户端身份validation,但似乎没有传递给Tomcat。

以下是工作(v2.2.17)httpd.conf文件的相关位:

<VirtualHost _default_:443> ServerName xxxxxxxx SSLEngine On SSLCertificateFile conf/ssl-prod/xxxxxxxx.crt SSLCertificateKeyFile conf/ssl-prod/xxxxxxxx.key SSLCACertificatePath conf/ssl.certs/ <Location /> ProxyPass http://xxxxxxxx:8009/ ProxyPassReverse http://xxxxxxxx:8009/ Order deny,allow Allow from all </Location> <Location /login/> SSLVerifyClient optional SSLVerifyDepth 10 ProxyPass http://xxxxxxxx:8009/ ProxyPassReverse http://xxxxxxxx:8009/ Order deny,allow Allow from all </Location> </VirtualHost> 

所以,这只是一个标准的SSL代理,直到用户转到“login”文件夹中的一个页面,此时apache要求客户端进行身份validation。

我已经尝试设置一些其他variables,看看是否会导致它ProxyAddHeaders ProxyPreserverHost上(和closures),但没有成功的工作。

我们在移植到2.2.23分支的最新版本时也遇到了同样的问题,但是当我们复制旧版本的时候,我们正在使用新的服务器。 唯一的区别是我们正在从32位服务器转移到64位服务器(都使用ApacheLounge可执行文件的Windows)。

有任何想法吗?

您没有任何机制将有关已validation客户端的信息传递给Tomcat服务器。

AJP是默认情况下在端口8009上使用的协议,而不是HTTP – 它具有内置的用于传递客户端证书数据的机制(只要SSLOptions +ExportCertData位于Apache中)。 你确定你不打算使用它吗?

如果没有,你需要在Apache和Tomcat应用程序中实现一些东西来处理这个问题。 可能是包含有关客户端证书信息的HTTP标头。