ProxyPass 无法在 Ubuntu 上使用 SSL

ProxyPass 无法在 Ubuntu 上使用 SSL

我有两个 AWS EC2 实例,一个 Web 服务器和一个应用服务器。我的主页位于我的 Web 服务器上。在使用 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:

当我进入网络服务器并输入

 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 时,我只需要在我的 Web 服务器上安装 SSL 证书,它们也会在我的应用服务器上生效。但是,在我的地下室,它们具有相同的公共 IP 地址。此外,Web 服务器运行 CentOS,而应用服务器运行 Debian。在我的云 DMZ 中,它们具有不同的 IP 地址,并且都在 Ubuntu 上运行。我想知道这是否需要在我的应用服务器上设置证书,就像我在 Web 服务器上设置证书一样。

答案1

由于您使用标准端口,因此您可以从代理配置中省略:443和。:80

我将使用的第一个测试是验证是否可以从您的 Web 服务器访问。通常使用或https://10.0.1.22:443/app1/page.php工具来完成此操作。wgetcurl

SSL 验证可能失败https://10.0.1.22。您需要在10.0.1.22必须监听 HTTPS 流量的服务器上拥有适当的证书。看来您没有重写Host标头,因此您应该能够在后端服务器上使用来自前端服务器的证书。

如果您信任您的本地网络,您可以代理http://10.0.1.22。这将使您的app1流量暴露在本地网络上,从而被窥探。

答案2

我想到了。

我本应将 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>

相关内容