Apache不通过mod_proxy将客户端x509证书转发给Tomcat

我有困难获得客户端x509证书从Apache使用mod_proxy转发到Tomcat。

从观察和阅读一些日志,似乎Apache客户端正在接受客户端x509证书。 但是,当Apache向Tomcat发送SSL请求时(它具有clientAuth =“want”),看起来不像在ssl握手期间传递客户端x509证书。

在Tomcat握手过程中,有没有一种合理的方法来查看Apache使用客户端x509证书所做的工作?

以下是我正在使用的环境:Apache / 2.2.3 Tomcat / 6.0.29 Java / 6.0_23 OpenSSL 0.9.8e

这是我的Apache VirtualHost SSLconfiguration:

<VirtualHost xxx.xxx.xxx.xxx:443> ServerName xxx ServerAlias xxx SSLEngine On SSLProxyEngine on ProxyRequests Off ProxyPreserveHost On ErrorLog logs/ssl_error_log TransferLog logs/ssl_access_log LogLevel debug SSLProtocol all -SSLv2 SSLCipherSuite ALL:!ADH:!EXPORT:!SSLv2:RC4+RSA:+HIGH:+MEDIUM:+LOW SSLCertificateFile /usr/local/certificates/xxx.crt SSLCertificateKeyFile /usr/local/certificates/xxx.key SSLCertificateChainFile /usr/local/certificates/xxx.crt SSLVerifyClient optional_no_ca SSLOptions +ExportCertData CustomLog logs/ssl_request_log \ "%t %h %{SSL_PROTOCOL}x %{SSL_CIPHER}x \"%r\" %b" <Proxy *> AddDefaultCharset Off Order deny,allow Allow from all </Proxy> ProxyPass / https://xxx.xxx.xxx.xxx:8443/ ProxyPassReverse / https://xxx.xxx.xxx.xxx:8443/ </VirtualHost> 

那么这里是我的Tomcat SSL连接器:

  <Connector port="8443" protocol="HTTP/1.1" SSLEnabled="true" address="xxx.xxx.xxx.xxx" maxThreads="150" scheme="https" secure="true" keystoreFile="/usr/local/certificates/xxx.jks" keypass="xxx_pwd" clientAuth="want" sslProtocol="TLSv1" proxyName="xxx.xxx.xxx.xxx" proxyPort="443" /> 

SSL重新协商可能有问题吗?

我们的Tomcat实例中的Truststore可能有问题吗? (我们正在使用具有合作伙伴组织CA的非标准信任库。)

是否有更好的日志logging与Apache的SSL内部发生的事情? 就像发生在客户端证书上的事情一样,或者为什么在tomcats要求的时候,证书没有被转发?

任何合理的援助将不胜感激。

感谢您的时间。

Apache正在生成一个全新的SSL会话以连接到后端tomcat服务器,所以客户端证书数据不会传递; 带有证书的系统不再是客户端。

如果你确定Apache和Tomcat设备之间没有encryption连接,那么使用AJP代理连接( ProxyPass / ajp://xxxx:8009/ )代替SSL,并在Apache中添加SSLOptions +ExportCertData指令将证书数据发送给Tomcat。 有更多关于在这里传递证书信息的信息。