为 Apache 反向代理配置 SSL

为 Apache 反向代理配置 SSL

我想使用 Apache2 反向代理将到我域的 HTTPS 连接重定向到一个唯一的子域。我想将到 a.example.com 的所有连接重定向到 $random$.b.example.com。为了生成随机值,我在端口 3000 上运行了一个脚本,所有对 a.example.com 的请求都代理到我的脚本,该脚本向客户端发送一个带有 302 重定向代码和新域 $random$.b.example.com 的回复,然后所有到 $random$.b.example.com 的连接都应该可以正常服务。

我有 a.example.com 和 $random$.b.example.com 的密钥和证书(通配符证书 *.b.example.com)。但是,当我的客户端收到重定向时,它会抛出错误invalid peer certificate: CertNotValidForName,并且不会继续查询 $random$.b.example.com。我做错了什么?

我的虚拟主机如下所示:

IfModule mod_ssl.c>
        <VirtualHost *:443>
                ServerName a.example.com

                SSLProxyEngine on
                ProxyPass / http://localhost:3000/
                ProxyPassReverse / http://localhost:3000/

                ErrorLog ${APACHE_LOG_DIR}/error.log
                CustomLog ${APACHE_LOG_DIR}/access.log vhost_combined
                SSLEngine on
                SSLCertificateFile      /etc/apache2/ssl/wildcard_domain.pem
                SSLCertificateKeyFile /etc/apache2/ssl/wildcard_domain.key
        </VirtualHost>
        <VirtualHost *:443>
                ServerAdmin webmaster@localhost
                ServerName b.example.com
                ServerAlias *.b.example.com
                DocumentRoot /var/www/html

                ErrorLog ${APACHE_LOG_DIR}/error.log
                CustomLog ${APACHE_LOG_DIR}/access.log vhost_combined
                SSLEngine on

                SSLCertificateFile      /etc/apache2/ssl/wildcard_domain.pem
                SSLCertificateKeyFile /etc/apache2/ssl/wildcard_domain.key

                <FilesMatch "\.(cgi|shtml|phtml|php)$">
                                SSLOptions +StdEnvVars
                </FilesMatch>
                <Directory /usr/lib/cgi-bin>
                                SSLOptions +StdEnvVars
                </Directory>

                Alias /data /path/to/data
                <Directory /path/to/data>
                    Options Indexes FollowSymLinks
                    AllowOverride All
                    Require all granted
            </Directory>

        </VirtualHost>
</IfModule>

答案1

您收到的错误意味着证书中的主题备用名称与您访问的 URL 中的主机名不匹配。

根据您的配置,您似乎对a.example.com和使用了相同的证书*.b.example.com。您会收到此错误,因为证书对两个域都无效,即您在重定向之前(访问 时a.example.com)或之后(访问 时whatever.b.example.com)收到证书错误。

解决方法是使用涵盖两个名称的证书,或者在配置中使用两个不同的证书,一个用于 ,a.example.com另一个用于 b.example.com*.b.example.com。请注意, 的证书*.example.com将仅涵盖a.example.com和 ,b.example.com但不涵盖*.b.example.com

相关内容