web-dev-qa-db-ja.com

ProxyPassがSSLを使用するUbuntuで機能しない

2つのAWSEC2インスタンス、ウェブサーバーとアプリサーバーがあります。私のホームページは私のウェブサーバー上にあります。 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を変更したので、ホームページは常にポート443のSSLを使用します。次の内容で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:

Webサーバーにアクセスして入力したとき

 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]

DMZでSSLを設定したとき、地下室では、SSL証明書をWebサーバーにインストールするだけで済み、それらはアプリサーバーでも有効になりました。しかし、私の地下室では、彼らは同じパブリックIPアドレスを持っていました。また、WebサーバーはCentOSを実行し、アプリサーバーはDebianを実行しました。私のクラウドDMZでは、IPアドレスが異なり、どちらもUbuntuで実行されます。これには、Webサーバーで設定するのと同じ方法で、アプリサーバーで証明書を設定する必要があるかどうか疑問に思いました。

1
OtagoHarbour

私はそれを考え出した。

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

標準ポートを使用しているため、プロキシ構成から:443および:80を省略できます。

私が使用する最初のテストは、Webサーバーからhttps://10.0.1.22:443/app1/page.phpにアクセスできることを確認することです。これには、ツールwgetまたはcurlが一般的に使用されます。

https://10.0.1.22のSSL検証が失敗している可能性があります。 10.0.1.22のサーバーに適切な証明書が必要です。これはHTTPSトラフィックをリッスンしている必要があります。 Hostヘッダーを書き換えていないようです。そのため、バックエンドサーバー上のフロントエンドサーバーからの証明書を使用できるはずです。

http://10.0.1.22にプロキシできるローカルネットワークを信頼しています。これにより、app1トラフィックがローカルネットワーク上のスヌーピングにさらされます。

1
BillThor