我想使用 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
。