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

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

我在使用 mod_proxy 将客户端 x509 证书从 Apache 转发到 Tomcat 时遇到了困难。

从观察和阅读一些日志来看,客户端 x509 证书似乎已被 Apache 接受。但是,当 Apache 向 Tomcat(其 clientAuth="want")发出 SSL 请求时,客户端 x509 证书似乎并未在 ssl 握手期间传递。

有没有合理的方法来查看 Apache 在与 Tomcat 握手期间对客户端 x509 证书做了什么?

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

这是我的 Apache VirtualHost SSL 配置:

<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 的非标准 Truststore。)

有没有更好的日志记录 Apache SSL 内部发生的情况?例如客户端证书发生了什么,或者为什么当 tomcats 要求证书时它没有转发证书?

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

感谢您的时间。

答案1

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

如果您同意 Apache 和 Tomcat 设备之间使用未加密的连接,则使用 AJP 代理连接 ( ProxyPass / ajp://x.x.x.x:8009/) 而不是 SSL,并SSLOptions +ExportCertData在 Apache 中添加指令,应该可以将证书数据传递给 Tomcat。有关传递证书信息的更多信息这里

相关内容