ProxyPass não funciona no Ubuntu com SSL

1

Eu tenho duas instâncias do AWS EC2, um servidor da Web e um servidor de aplicativos. Minha home page está no meu servidor web. Antes de usar o SSL, consegui acessar uma página no meu servidor de aplicativos da minha página inicial usando

http://homePage.com/app1/page.php

Meu proxy-host.conf tem o seguinte conteúdo

<virtualhost *:80>
 ServerAdmin webmaster@localhost
 DocumentRoot /var/www/html/
 ErrorLog ${APACHE_LOG_DIR}/error.log
 CustomLog ${APACHE_LOG_DIR}/access.log combined
 ProxyPreserveHost On
# Servers to proxy the connection, or
# List of application servers Usage
 ProxyPass /app1/ http://10.0.1.22:80/
 # ProxyPass /app1/ http://10.0.1.22:443/
</virtualhost>

Eu já alterei o /etc/apache2/ports.conf e /etc/apache2/httpd.conf para que minha home page sempre use SSL com a porta 443. Eu criei um arquivo proxy-ssl-host.conf com o seguinte conteúdo.

<virtualHost *:443>
    ServerAdmin webmaster@localhost
    DocumentRoot /var/www/html/
    ErrorLog ${APACHE_LOG_DIR}/error.log
    CustomLog ${APACHE_LOG_DIR}/access.log combined
    SSLEngine On
     # Set the path to SSL certificate
     # Usage: SSLCertificateFile /path/to/cert.pem
    SSLCertificateFile /etc/apache2/ssl/homepage.com.crt
    SSLCertificateKeyFile /etc/apache2/ssl/homepage.com.key
    ProxyPreserveHost On
    ProxyPass  /app1/ https://10.0.1.22:443/
    ProxyPassReverse  /app1/ https://10.0.1.22:443/
    ServerName localhost
</VirtualHost>

Depois de fazer o proxy-ssl-host.conf, eu digitei o seguinte

sudo a2ensite  proxy-ssl-host.conf
sudo service apache2 reload
sudo systemctl restart apache2.service

Agora, quando eu for ao meu navegador e entrar

https://homePage.com/app1/page.php

Eu obtenho

The requested URL /app1/page.php was not found on this server.

Apache/2.4.18 (Ubuntu) Server at homePage.com Port 443

EDIT 1:

Eu tentei

sudo netstat -ntpl | grep :443

no servidor de aplicativos e não obteve nada, então o apache não estava escutando na porta 443 desse servidor. Eu adicionei

Listen 443

depois

Listen 80

no ports.conf e agora obtenha

tcp6       0      0 :::443                  :::*                    LISTEN      2205/apache2

depois

sudo netstat -ntpl | grep :443

Infelizmente, isso não resolveu nenhum dos meus problemas no navegador.

EDIT 2:

Quando fui ao servidor da web e inseri

 wget https://10.0.1.22/page.php

Eu tenho

--2018-02-18 20:58:32--  https://10.0.1.22/page.php
Connecting to 10.0.1.22:443... connected.
OpenSSL: error:140770FC:SSL routines:SSL23_GET_SERVER_HELLO:unknown protocol
Unable to establish SSL connection.

Quando entrei

wget https://10.0.1.22/app1/page.php

Eu tenho

--2018-02-18 20:59:37--  https://10.0.1.22/app1/page.php
Connecting to 10.0.1.22:443... connected.
OpenSSL: error:140770FC:SSL routines:SSL23_GET_SERVER_HELLO:unknown protocol
Unable to establish SSL connection.

Quando entrei

wget http://10.0.1.22

Eu tenho

--2018-02-18 19:32:45--  http://10.0.1.22/
Connecting to 10.0.1.22:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 4198 (4.1K) [text/html]
Saving to: ‘index.html’

index.html                                100%[=====================================================================================>]   4.10K  --.-KB/s    in 0s

2018-02-18 19:32:45 (564 MB/s) - ‘index.html’ saved [4198/4198]

Quando eu configuro o SSL no meu DMZ, no meu porão, eu só precisei instalar os certificados SSL no meu servidor web e eles entraram em vigor no meu servidor de aplicativos também. No entanto, no meu porão, eles tinham o mesmo endereço IP público. Além disso, o servidor web rodou o CentOS e o servidor de aplicativos Debian. Com minha nuvem DMZ, eles têm endereços IP diferentes e ambos são executados no Ubuntu. Eu queria saber se isso exige a configuração dos certificados, no meu servidor de aplicativos, da mesma forma que os configuro no servidor da Web.

    
por OtagoHarbour 18.02.2018 / 00:49

2 respostas

0

Eu percebi isso.

Eu deveria colocar o ProxyPass fora dos blocos. Isso alterou o erro para o descrito aqui . Eu usei a solução deles e o erro agora foi alterado para o descrito aqui . Eu usei a solução deles e isso resolveu completamente o meu problema.

Então /etc/apache2/sites-available/proxy-host.conf torna-se

SSLProxyEngine on
SSLProxyVerify none
SSLProxyCheckPeerCN off
SSLProxyCheckPeerName off
SSLProxyCheckPeerExpire off
ProxyPass /app1/ https://ip-10-0-1-22/

<virtualhost *:80>
     ServerAdmin webmaster@localhost
     DocumentRoot /var/www/html/
     ErrorLog ${APACHE_LOG_DIR}/error.log
     CustomLog ${APACHE_LOG_DIR}/access.log combined
     ProxyPreserveHost On
    # Servers to proxy the connection, or
    # List of application servers Usage
     ProxyPass /app1/ https://ip-10-0-1-22.ec2.internal/
</virtualhost>

e /etc/apache2/sites-available/proxy-ssl-host.conf tornam-se

SSLProxyEngine on
SSLProxyVerify none
SSLProxyCheckPeerCN off
SSLProxyCheckPeerName off
SSLProxyCheckPeerExpire off
ProxyPass  /app1/ https://ip-10-0-1-22/
ProxyPassReverse  /app1/ https://ip-10-0-1-22/

<virtualHost *:443>
        ServerAdmin webmaster@localhost
        DocumentRoot /var/www/html/
        ErrorLog ${APACHE_LOG_DIR}/error.log
        CustomLog ${APACHE_LOG_DIR}/access.log combined
        SSLEngine On
         # Set the path to SSL certificate
         # Usage: SSLCertificateFile /path/to/cert.pem
        SSLEngine on
        SSLProxyEngine On
        ProxyRequests Off
        SSLCertificateFile /etc/apache2/ssl/clusterprism.com.crt
        SSLCertificateKeyFile /etc/apache2/ssl/clusterprism.com.key
        ProxyPass  /app1/ https://ip-10-0-1-22.ec2.internal/
        ProxyPassReverse  /app1/ https://ip-10-0-1-22.ec2.internal/
        ServerName localhost
</VirtualHost>
    
por 03.03.2018 / 15:03
1

Como você está usando portas padrão, você pode omitir :443 e :80 da sua configuração de proxy.

O primeiro teste que eu usaria é verificar se https://10.0.1.22:443/app1/page.php está acessível no seu servidor web. As ferramentas wget ou curl são comumente usadas para isso.

É provável que a validação SSL falhe por https://10.0.1.22 . Você precisará de um certificado apropriado no servidor em 10.0.1.22 , que deve estar atendendo ao tráfego HTTPS. Parece que você não está reescrevendo o cabeçalho Host , portanto, você deve poder usar o certificado de seu servidor front-end no servidor back-end.

Se você confia na sua rede local, pode fazer proxy para http://10.0.1.22 . Isso exporá o tráfego de app1 a espionagem na rede local.

    
por 18.02.2018 / 16:38