Eu tenho um aplicativo Java que precisa falar com outro site da intranet usando HTTPS em ambas as direções. Depois de lutar com implementações SSL do Java por algum tempo, eu desisti disso e agora configurei um Apache que deveria agir como um proxy reverso bidirecional:
external app ---(HTTPS request)---> Apache ---(local HTTP request)---> Java app
Essa direção funciona bem, mas a outra direção não:
Java app ---(local HTTP request)---> Apache ---(HTTPS request)---> external app
Esta é a configuração para o vhost que implementa o segundo proxy:
Listen 127.0.0.1:8081
<VirtualHost appgateway:8081>
ServerName appgateway.local
SSLProxyEngine on
ProxyPass / https://externalapp.corp:443/
ProxyPassReverse / https://externalapp.corp:443/
ProxyRequests Off
AllowEncodedSlashes On
# we do not need to apply any more restrictions here, because we listened on
# local connections only in the first place (see the Listen directive above)
<Proxy https://externalapp.corp:443/*>
Order deny,allow
Allow from all
</Proxy>
</VirtualHost>
Um curl http://127.0.0.1:8081/
deve servir o equivalente a https://externalapp.corp
, mas resulta em 403 Forbidden
, com a seguinte mensagem no log de erros do Apache:
[Wed Jun 04 08:57:19 2014] [error] [client 127.0.0.1] Directory index forbidden by Options directive: /srv/www/htdocs/
Esta mensagem me intriga completamente: Sim, eu não configurei nenhuma permissão no DocumentRoot deste vhost, mas tudo funciona bem para a outra direção do proxy onde eu não tenho. Para referência, aqui está o outro vhost:
Listen this_vm_hostname:443
<VirtualHost javaapp:443>
ServerName javaapp.corp
SSLEngine on
SSLProxyEngine on
# not shown: SSLCipherSuite, SSLCertificateFile, SSLCertificateKeyFile
SSLOptions +StdEnvVars
ProxyPass / http://localhost:8080/
ProxyPassReverse / http://localhost:8080/
ProxyRequests Off
AllowEncodedSlashes On
# Local reverse proxy authorization override
<Proxy http://localhost:8080/*>
Order deny,allow
Allow from all
</Proxy>
</VirtualHost>