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

时间:2015-08-19 17:31:01

标签: apache ssl vhosts

我在配置了vhost站点的多租户服务器上运行apache。

所以我在domain1.com上有一个vhost,它在vhost文件中定义了SSL证书。然后我有没有定义SSL证书的domain2.com。如果我访问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并在没有警告的情况下重定向)

当然,生成用于此目的的自签名证书也会引发证书警告。如果我删除&#34; SSLEngine On&#34;指令所以我根本不必指定一个证书,它基本上在整个服务器上打破SSL,没有任何网站工作正常。

如何在不必担心用户获取证书警告的情况下成功执行此操作,并将其对domain2.com的所有HTTPS请求重定向到HTTP?

1 个答案:

答案 0 :(得分:2)

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

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

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