没有 SSL 证书设置的虚拟主机重定向到使用 SSL 的其他虚拟主机

Posted

技术标签:

【中文标题】没有 SSL 证书设置的虚拟主机重定向到使用 SSL 的其他虚拟主机【英文标题】:vhosts without SSL cert setup redirect to other vhosts that use SSL 【发布时间】:2015-11-13 03:18:15 【问题描述】:

我在配置了虚拟主机站点的多租户服务器上运行 apache。

所以我有一个 domain1.com 的虚拟主机,它在虚拟主机文件中定义了 SSL 证书。然后我有 domain2.com 没有定义 SSL 证书。如果我访问https://domain2.com,浏览器会拉出 domain1.com 的网站,然后当然会在浏览器中显示损坏的 SSL 证书警告。

我试图纠正的方法是:

首先,在 domain2 的 vhost.conf 文件中,我写了这个:

 <VirtualHost ip:443>  
 ServerName domain2.com  
 DocumentRoot /var/www/domain2/  
 SSLEngine on  
 SSLCertificateFile /var/certs/cert.crt  
 SSLCertificateKeyFile /var/certs/cert.key  
 Redirect permanent / http://www.domain2.com  
 </VirtualHost>  

当然,这个客户端实际上并不拥有自己的 SSL 证书,所以我将它指向我们的一个域的证书文件。这在某些情况下会在用户访问https://www.domain2.comhttps://domain2.com 时向他们发出证书警告。 (在 Chrome 中,我可以转到 https://domain2.com 并在没有警告的情况下被重定向)

当然,生成用于此目的的自签名证书也会引发证书警告。如果我删除“SSLEngine On”指令,因此我根本不必指定证书,它实际上会破坏整个服务器上的 SSL,并且没有网站可以正常工作。

我怎样才能成功地做到这一点,而不必担心用户收到证书警告,并且只需将他们对 domain2.com 的所有 HTTPS 请求重定向到 HTTP?

【问题讨论】:

【参考方案1】:

你不能。 在没有证书警告的情况下进行正确重定向的唯一方法是为您要重定向的域提供正确的证书。

重定向是在 HTTP 级别完成的,即在 HTTPS 连接创建的 TLS 隧道内。因此,客户端首先需要创建 TLS 连接,然后才能获得重定向。但是创建 TLS 连接已经导致证书问题,因为 URL 和证书中的名称不匹配。

另一种方法是将所有 SSL 主机移动到一个 IP 地址,将所有其他主机移动到另一个 IP 地址。这样,客户端不会收到证书警告,但会看到此地址上没有 HTTPS。

【讨论】:

以上是关于没有 SSL 证书设置的虚拟主机重定向到使用 SSL 的其他虚拟主机的主要内容,如果未能解决你的问题,请参考以下文章

.htaccess 使用共享 ssl 证书

如何诊断自己的网站 SSL 证书配置正确与否?

如何使用 301 重定向而不是 302 将 HTTP 站点重定向到 HTTPS 站点

自动 IIS6 403.4 重定向到 SSL 不起作用

使用 Nginx 将 HTTP 重定向到 HTTPS

将 https://www 重定向到 https://non-www - 没有看到证书错误,可能吗?