Tenho um servidor frontend.example.com
com IP público. É o Apache (2.4) que deve fazer proxy do tráfego vindo de service1.example.com
(DNS alias to frontend.example.com
).
service1.example.com
é uma VM em uma LAN privada ( 192.168.56.0
) entre as duas.
Agora, isso é fácil para HTTP:
<VirtualHost *:80>
ServerName service1.example.com
ProxyPass / http://192.168.56.2/
ProxyPassReverse / http://192.168.56.2/
<Location "/">
Require all granted
</Location>
</VirtualHost>
Estou tentando fazer o mesmo para HTTPS:
<VirtualHost *:443>
ServerName service1.example.com
SSLEngine On
SSLProxyEngine On
ProxyRequests Off
SSLProxyCheckPeerCN off
SSLProxyCheckPeerExpire off
SSLInsecureRenegotiation on
SSLProxyVerify none
SSLVerifyClient none
SSLCertificateFile /etc/ssl/certs/example_com.crt
SSLCertificateKeyFile /etc/ssl/certs/example_com.key
ProxyPass / https://192.168.56.2/
ProxyPassReverse / https://192.168.56.2/
<Location "/">
Require all granted
</Location>
</VirtualHost>
Tentar acessar service1.example.com
via HTTPS retorna: Erro durante o handshake SSL com o servidor remoto
Segurança não é minha preocupação aqui. service1
requer uma conexão HTTPS para alguns de seus serviços, é por isso que não estou simplesmente fazendo proxy de HTTPS para HTTP. Não quero frontend.example.com
me envolver com SSL. O que eu gostaria é que falasse "ei, estou com conexão no 443, não estou lidando com isso, estou apenas encaminhando para esse IP interno, que vai cuidar disso". Eu só quero que ele passe o pedido adiante. Isso pode ser feito?
Como você pode ver na configuração do HTTPS acima, tentei relaxar a segurança o máximo possível (por exemplo SSLInsecureRenegotiation on
, para diminuir as barreiras contra um ataque man-in-the-middle, não é?). Mas nada funcionou até agora.
Aparentemente, a única diretiva que estava faltando é
SSLProxyCheckPeerName off
. Agora funciona.