我们当前的设置

我们当前的设置

我正在寻找一种解决方案,通过 SSL 提供在本地网络子域下运行的 Web 应用程序。我们不想使用 DynDNS,而是使用我们自己域的子域。

我们当前的设置

根服务器(互联网)

我们有一个装有 ubuntu 16.04、apache 2 的根服务器,托管在我们的域 example.com 和所有子域终止的数据中心。

<VirtualHost *:443>
        ServerName SUB.EXAMPLE.COM
        SSLEngine on
        SSLProxyEngine on
        SSLProxyCheckPeerCN On
        SSLProxyCheckPeerExpire On
        <Proxy *>
                Order deny,allow
                Allow from all
        </Proxy>
                ProxyPass / https://PUBLICIP:9443/
                ProxyPassReverse / https://PUBLICIP:9443/
</VirtualHost>

应用服务器(本地)

Debian 与 Apache 2

<VirtualHost *:9443>
        ServerName SUB.EXAMPLE.COM
        ServerAdmin webmaster@localhost
        DocumentRoot /var/www/MYAPP
        ErrorLog ${APACHE_LOG_DIR}/error.log
        CustomLog ${APACHE_LOG_DIR}/access.log combined
        <IfModule mod_headers.c>
           Header always set Strict-Transport-Security "max-age=15768000; includeSubDomains; preload"
        </IfModule>
        SSLEngine on
        SSLCertificateFile /etc/letsencrypt/live/SUB.DOMAIN.COM/fullchain.pem
        SSLCertificateKeyFile /etc/letsencrypt/live/SUB.DOMAIN.COM/privkey.pem
</VirtualHost>

迄今为止的研究

  1. 我知道根服务器上的配置是错误的,因为我没有在那里提供证书,请参阅问题。
  2. 到目前为止,我发现的大多数解决方案都是关于从反向代理(我们的根服务器)进行 SSL 处理的,但两个服务器之间的连接不是通过 SSL 的(例如,因为它们在同一个网络中,所以没有必要)。虽然我们需要它,因为否则根服务器和应用程序之间的通信将不会被加密。
  3. 防火墙允许访问端口 9443,因此在尝试访问时https://公开:9443我得到 NET::ERR_CERT_COMMON_NAME_INVALID(这是正确的,因为该证书是针对 SUB.EXAMPLE.COM 的)。

问题

我是否必须获得 2 个证书?一个用于我们根服务器上的 SUB.EXAMPLE.COM,另一个用于我们的 PUBLICIP(据我所知,通过 Letsencrypt 无法实现)。或者还有其他方法可以解决这个问题(无需设置 DNS)?

答案1

因此,我的解决方案是在两台服务器上使用相同的证书,并在根服务器上使用以下虚拟主机配置:

<VirtualHost *:443>
        ServerName SUB.EXAMPLE.COM
        ProxyPass / https://PUBLICIP:9443/
        ProxyPassReverse / https://PUBLICIP:9443/

        SSLCertificateFile /etc/letsencrypt/live/SUB.EXAMPLE.COM/fullchain.pem
        SSLCertificateKeyFile /etc/letsencrypt/live/SUB.EXAMPLE.COM/privkey.pem

        Include /etc/letsencrypt/options-ssl-apache.conf

        SSLProxyEngine on
        SSLProxyCheckPeerCN Off
        SSLProxyCheckPeerName Off
        SSLProxyCheckPeerExpire On

</VirtualHost>

相关内容