1

У меня есть два экземпляра AWS EC2, веб-сервер и сервер приложений. Моя домашняя страница находится на моем веб-сервере. До того, как я использовал SSL, я смог получить доступ к странице на своем сервере приложений с моей домашней страницы, используя

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

Мой proxy-host.conf имеет следующий контент

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

С тех пор я изменил /etc/apache2/ports.conf и /etc/apache2/httpd.conf, поэтому моя домашняя страница всегда использует SSL с портом 443. Я создал файл proxy-ssl-host.conf со следующим содержимым.

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

После создания proxy-ssl-host.conf я ввел следующее

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

Теперь, когда я иду в свой браузер и захожу

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

я получил

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

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

РЕДАКТИРОВАТЬ 1:

Я старался

sudo netstat -ntpl | grep :443

на сервере приложений и ничего не получил, так что Apache не прослушивает порт 443 на этом сервере. я добавил

Listen 443

после

Listen 80

в ports.conf и теперь получите

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

после

sudo netstat -ntpl | grep :443

К сожалению, это не решило ни одну из моих проблем в браузере.

РЕДАКТИРОВАТЬ 2:

Когда я зашел на веб-сервер и вошел

 wget https://10.0.1.22/page.php

я получил

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

Когда я вошел

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

я получил

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

Когда я вошел

wget http://10.0.1.22

я получил

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

Когда я настраивал SSL на своей DMZ, в моем подвале мне нужно было только установить SSL-сертификаты на моем веб-сервере, и они также вступили в силу на моем сервере приложений. Однако в моем подвале у них был один и тот же публичный IP-адрес. Также на веб-сервере работали CentOS и сервер приложений Debian. В моей облачной DMZ они имеют разные IP-адреса и работают в Ubuntu. Мне было интересно, нужно ли для этого устанавливать сертификаты на моем сервере приложений так же, как я настраивал их на своем веб-сервере.

2 ответа2

1

Поскольку вы используете стандартные порты, вы можете опустить :443 и :80 конфигурации вашего прокси.

Первый тест, который я бы использовал, чтобы убедиться, что https://10.0.1.22:443/app1/page.php доступен с вашего веб-сервера. Для этого обычно используются инструменты wget или curl .

Вполне вероятно, что проверка SSL не выполняется для https://10.0.1.22 . Вам понадобится соответствующий сертификат на сервере 10.0.1.22 который должен прослушивать HTTPS-трафик. Похоже, вы не переписываете заголовок Host , поэтому вы должны иметь возможность использовать сертификат с вашего внешнего сервера на внутреннем сервере.

Если вы доверяете своей локальной сети, вы можете перейти по http://10.0.1.22 . Это подвергнет ваш трафик app1 отслеживанию в локальной сети.

0

Я понял.

Я должен был поставить ProxyPass за пределы блоков. Это изменило ошибку на ту, что описана здесь. Я использовал их решение, и ошибка теперь изменилась на ту, что описана здесь. Я использовал их решение, и это полностью решило мою проблему.

Таким образом /etc/apache2/sites-available/proxy-host.conf становится

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>

и /etc/apache2/sites-available/proxy-ssl-host.conf становится

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>

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .