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サーバーで設定するのと同じ方法で、アプリサーバーで証明書を設定する必要があるかどうか疑問に思いました。
私はそれを考え出した。
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>
標準ポートを使用しているため、プロキシ構成から: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
トラフィックがローカルネットワーク上のスヌーピングにさらされます。