O Apache não encaminha o certificado x509 do cliente para o Tomcat via mod_proxy

4

Estou com dificuldades para obter um certificado cliente x509 a ser encaminhado para o Tomcat do Apache usando o mod_proxy.

A partir de observações e da leitura de alguns logs, parece que o certificado x509 do cliente está sendo aceito pelo Apache. Mas, quando o Apache faz uma solicitação SSL para o Tomcat (que tem clientAuth="want"), não parece que o certificado x509 do cliente é passado durante o handshake SSL.

Existe uma maneira razoável de ver o que o Apache está fazendo com o certificado cliente x509 durante seu handshake com o Tomcat?

Aqui está o ambiente com o qual estou trabalhando: Apache / 2.2.3 Tomcat / 6.0.29 Java / 6.0_23 OpenSSL 0.9.8e

Aqui está minha configuração SSL do Apache VirtualHost:

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

Então aqui está o meu conector SSL Tomcat:

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

Poderia haver problemas com a Renegociação SSL?

Poderia haver problemas com o Truststore em nossa instância do Tomcat? (Estamos usando um Truststore não padrão que possui CAs de organizações parceiras.)

Existe log melhor para o que está acontecendo internamente com o Apache para SSL? Como o que está acontecendo com o certificado do cliente ou porque ele não está encaminhando o certificado quando os gatos perguntam por um?

Qualquer ajuda razoável seria muito apreciada.

Obrigado pelo seu tempo.

    
por hooknc 17.03.2011 / 23:12

1 resposta

5

O Apache está gerando uma nova sessão SSL para a conexão com o servidor backend tomcat, portanto, os dados do certificado do cliente não são passados; o sistema com o certificado não é mais o cliente.

Se você estiver satisfeito com uma conexão não criptografada entre o Apache e o dispositivo Tomcat, usar uma conexão de proxy AJP ( ProxyPass / ajp://x.x.x.x:8009/ ) em vez de SSL e adicionar uma diretiva SSLOptions +ExportCertData no Apache deve passar os dados do certificado para Tomcat Há mais informações sobre como passar as informações do certificado aqui .

    
por 17.03.2011 / 23:36