Apache 2.4 中的 SSL 证书错误

SSL Certificate error in Apache 2.4

我在 Apache 2.4 网络服务器上 运行 两个网站。它被配置为 NameBaseVhost,并且都有各自由 Godaddy 颁发的通配符 ssl 证书(*.site1.com 和 *.site2.com)。 一切正常。当我通过它的子域 www.site1.com 和 www.site2.com 访问网站时,它工作正常。 Apache 有一个重写规则,可以将 http 重定向到 https,因此这两个网站都可以完美地重定向。

现在的问题是当我将根域重定向到 www 时,site2.com 它给我错误。

Error code: ssl_error_bad_cert_domain

site2.com uses an invalid security certificate. 
The certificate is only valid for the following names: 
*.site1.com, site1.com 

site1.com的httpd配置

RewriteEngine On
RewriteCond %{HTTPS} !=on
RewriteRule ^/?(.*) https://%{SERVER_NAME}/ [R]
# Redirect root domain to www
RewriteCond %{HTTP_HOST} ^site1\.com$ [NC]
RewriteRule ^(.*)$ https://www.site1.com/ [R=301,L]

<VirtualHost *:443>
ServerName www.site1.com
DocumentRoot /var/www/html/site1/public/
SSLEngine On
SSLCertificateFile /etc/pki/tls/certs/site1/site1.crt
SSLCertificateKeyFile /etc/pki/tls/private/site1/site1.key
SSLCertificateChainFile /etc/pki/tls/certs/site1/gd_site1.crt
Header always set Strict-Transport-Security "max-age=31536000;
</VirtualHost>

site2.com

的 HTTPD 配置
RewriteEngine On
RewriteCond %{HTTPS} !=on
RewriteRule ^/?(.*) https://%{SERVER_NAME}/ [R]
# Redirect root domain to www
RewriteCond %{HTTP_HOST} ^site2\.com$ [NC]
RewriteRule ^(.*)$ https://www.site2.com/ [R=301,L]

<VirtualHost *:443>
ServerName www.site2.com
DocumentRoot /var/www/html/site2/public/
SSLEngine On
SSLCertificateFile /etc/pki/tls/certs/site2/site2.crt
SSLCertificateKeyFile /etc/pki/tls/private/site2/site2.key
SSLCertificateChainFile /etc/pki/tls/certs/site2/gd_site2.crt
Header always set Strict-Transport-Security "max-age=31536000;
</VirtualHost>

如何解决这个问题?

您显然正在为 https://site2.com 获取 site1 的证书。这意味着您正在访问第一个虚拟主机,而不是第二个。

你只需要在第二个虚拟主机中 ServerAlias site2.com。它目前只处理 www.site2.com,因此第一个列出的虚拟主机(隐含地是包罗万象的)在重定向之前用于证书。