基于名称的虚拟主机导致 NET::ERR_CERT_COMMON_NAME_INVALID

基于名称的虚拟主机导致 NET::ERR_CERT_COMMON_NAME_INVALID

我在 Web 服务器配置文件中拥有以下格式的 VirtualHost 指令:

<VirtualHost *:443>
  ServerName example.com

进入https://example.com浏览器后,网站会正确呈现,流量是 TLS 加密的。我一将其重写为

<VirtualHost example.com:443>

向端口 443 上的域发送 GET 请求会导致 SSL 错误,即NET::ERR_CERT_COMMON_NAME_INVALID在 Chrome 中,它说网络服务器提供了一个有效的证书example.net(这个其他域仍然托管在我的服务器上)。

如果我查看证书(openssl x509 -in cert.pem -text),我会发现它颁发给

Subject: CN=example.com

证书路径已正确配置。

附加信息:两个域在 hosts 文件中都解析为相同的 127.0.0.1,NameVirtualHost 未设置,并且在 Web 服务器前面有一个代理,希望这与此问题无关。

答案1

VirtualHost 指令的参数必须与定义的 NameVirtualHost 指令匹配。

如果您没有在配置中定义 NameVirtualHost domain.com,那么您不能在 VirtualHost 指令中使用 domain.com,因为它并不常用,* 或者 IP 通常用于 NameVirtualHost。

由于此 VirtualHost 无效,它会加载该 IP 上端口 443 的第一个或默认的 VirtualHost,即为您服务 SSL 的 anotherdomain.com。

答案2

我遇到了这个问题,我之前将我的应用程序放在内部 QA 域中,并拥有自己的证书。

当域名更新为永久域名时,我想设置从旧域名到新域名的重定向规则。

对我来说,解决方法是在重定向之前在虚拟主机中定义 QA SSL 证书:

#QA VHost
<VirtualHost *:443>
        SSLEngine on
        SSLCertificateFile /etc/ssl/certs/qa/server.crt
        SSLCertificateKeyFile /etc/ssl/certs/qa/server.key
        SSLCACertificateFile /etc/ssl/certs/qa/rsaca.crt


        ServerName qa.internaldomain.com
        Redirect / https://production.com/

</VirtualHost>

然后在相关虚拟主机中定义生产 SSL

# Prod VHost
<VirtualHost *:443>
        ServerName production.com
        DocumentRoot /http/production

        SSLEngine on
        SSLCertificateFile /etc/ssl/certs/production/server.crt
        SSLCertificateKeyFile /etc/ssl/certs/production/server.key
        SSLCACertificateFile /etc/ssl/certs/production/rsaca.crt

        # other vhost configs ...

</VirtualHost>

显然,这仅当您拥有重定向域的有效证书时才有效,我想如果您没有,您可以随时使用像 certbot 这样的服务。

相关内容