O servidor proxy Apache 2.4 obtém autenticação de cliente, mas não a passa para o tomcat

1

Anteriormente, o Apache 2.2.17 era executado como um proxy reverso que solicitava a autenticação do cliente (usando SSLVerifyClient) e transmitia essa autenticação para o mecanismo de servlet do aplicativo jetty / tomcat. Então, meu aplicativo Java leria essas informações (x509Certificate) da solicitação.

Ao atualizar para novos servidores, decidimos migrar para a versão mais recente do Apache, mas esse processo parece não funcionar mais. O Apache ainda solicita a autenticação do cliente, mas parece não passar para o Tomcat.

Aqui estão os bits relevantes do arquivo httpd.conf (v2.2.17) em funcionamento:

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

Portanto, é apenas um proxy SSL padrão até que o usuário vá para uma página na pasta "login", no ponto em que o apache solicita a autenticação do cliente.

Eu tentei configurar algumas outras variáveis para ver se isso faria com que funcionasse ProxyAddHeaders ativado ProxyPreserverHost ativado (e desativado) mas não teve sucesso.

Também tivemos o mesmo problema ao mudar para a versão mais recente da ramificação 2.2.23, mas quando copiamos a versão mais antiga que estávamos usando para o novo servidor, ela funcionou bem. A única outra diferença é que estamos mudando de um servidor de 32 bits para um servidor de 64 bits (ambos usando os executáveis do ApacheLounge).

Alguma idéia?

    
por DieSpiderDie 20.11.2012 / 18:46

1 resposta

0

Você não possui nenhum mecanismo para passar as informações sobre o cliente autenticado para o servidor Tomcat.

AJP é o protocolo usado na porta 8009 por padrão, não HTTP - e possui mecanismos integrados para transmitir dados de certificado de cliente (contanto que SSLOptions +ExportCertData esteja em vigor no Apache). Tem certeza de que não pretende usar isso?

Se não, você precisará implementar algo para lidar com isso, no Apache, bem como no seu aplicativo Tomcat. Provavelmente um cabeçalho HTTP com informações sobre o certificado do cliente.

    
por 20.11.2012 / 19:37