Configure o Apache2 SSL como um proxy reverso

1

Eu tenho um aplicativo da web que lida com informações potencialmente confidenciais que precisam ser expostas mais publicamente. Infelizmente, ele tem seu próprio servidor web integrado que não suporta SSL. Devido também um processo de aprovação de software, eu tenho que usar o Apache como proxy reverso.

Eu tenho quase que inteiramente trabalhando, acessando diretamente qualquer página sobre SSL funciona perfeitamente, mas redirecionamentos enviados pelo servidor não estão sendo reescritos. Por exemplo, tentar acessar o URL raiz link quando você não estiver logado deve redirecioná-lo para link mas em vez disso ele está redirecionando para o link que resulta em uma BadRequest.

Todos os Googling que fiz sobre isso revelaram configurações desatualizadas que parecem não estar mais disponíveis no apache2, estão sugerindo a mudança do aplicativo por trás do proxy para lidar com ele (o que infelizmente não é uma opção).

Aqui está a parte relevante da minha configuração do apache:

<IfModule mod_ssl.c>
  Listen 4000

  <VirtualHost *:4000>
    ServerAdmin webmaster@localhost
    ServerName frontend.example.tld

    CustomLog ${APACHE_LOG_DIR}/ssl_access.log combined
    CustomLog ${APACHE_LOG_DIR}/ssl_request_log "%t %h %{SSL_PROTOCOL}x %{SSL_CIPHER}x \"%r\" %b"
    ErrorLog ${APACHE_LOG_DIR}/error.log
    LogLevel info

    SSLProtocol -ALL +SSLv3 +TLSv1
    SSLCipherSuite ALL:!ADH:!EXPORT56:!EXP:!eNULL:!aNULL:RC4+RSA:+HIGH:+MEDIUM:!LOW:!SSLv2

    SSLEngine on
    SSLCertificateFile    /etc/ssl/certs/frontend.crt
    SSLCertificateKeyFile /etc/ssl/private/frontend.key
    SSLCertificateChainFile  /etc/ssl/certs/gd_bundle.crt

    BrowserMatch "MSIE [2-6]" nokeepalive ssl-unclean-shutdown downgrade-1.0 force-response-1.0
    BrowserMatch "MSIE [17-9]" ssl-unclean-shutdown

    ProxyRequests Off
    ProxyPreserveHost On

    ProxyPass / http://127.0.0.1:3000/
    ProxyPassReverse / http://127.0.0.1:3000/
  </VirtualHost>
</IfModule> 

Em outro lugar, tenho o proxy e o módulo proxy_http carregados.

Atualização:

Aqui está o conteúdo da mensagem de erro recebida após o redirecionamento tentado:

Bad Request

Your browser sent a request that this server could not understand. Reason: You're speaking plain HTTP to an SSL-enabled server port. Instead use the HTTPS scheme to access this URL, please. Hint: https://frontend.example.tld/

    
por TrueDuality 06.05.2013 / 18:45

2 respostas

1

Parece que o aplicativo está gerando esse Location de cabeçalho com base no conteúdo do cabeçalho Host de entrada, que é o que queremos (e tornado possível por ProxyPreserveHost ), mas não sabe o correto protocolo para o novo local.

Com base na maneira como o aplicativo parece estar funcionando, temos algumas opções para lidar com isso:

  1. Gire o ProxyPreserveHost Off e veja se isso ajuda; o cabeçalho Location gerado deve corresponder ao seu ProxyPassReverse existente e ser modificado de acordo com o URL correto, ou se isso não funcionar;
  2. Adicione uma nova linha ProxyPassReverse (deixando o antigo também) tentando corresponder e alterar os Location cabeçalhos que o aplicativo está enviando.

    ProxyPassReverse / http://frontend.example.tld:4000/
    
por 06.05.2013 / 22:26
0

Eu encontrei um problema semelhante, as seguintes linhas estavam faltando na minha configuração e foram resolvidas para mim:

    SSLProxyEngine          On
    SSLProxyVerify          none
    SSLProxyCheckPeerCN     off

Coloque essas linhas logo após SSLEngine On .

    
por 06.05.2013 / 20:37