Apache 2 – 具有多个虚拟主机的多个SSL站点

我在Apache 2中有大约10个站点。这些都是独立的站点 – 不是子站点。 我有两个SSL证书,我想为他们build立SSL,而不是强迫我的非ssl站点使用任何证书。

我遇到的问题是我不能同时拥有两个证书,它总是默认为第一个,而不pipe我去哪个站点。

我一直在读这个,看起来像我的服务器可能支持SSI,Windows XP不支持它,所以这将不是一个可行的select。 另外,我简单地看了一下mod_gnutils,但是我不能保证这样做会达到我想要的效果,而且如果我不是绝对必须的话,我也不会很自在地做出所有必要的安装/configuration。

任何方向提供给我这个将不胜感激!

这里是两个443个虚拟主机。 我已经尝试引用虚拟主机,如下所示,以及其他变体,如简单的“和”。 我也玩过NameVirtualHost引用,但仍然无济于事。

Listen 443 NameVirtualHost www.site1.com:443 NameVirtualHost www.site2.com:443 <VirtualHost www.site1.com:443> DocumentRoot /var/www/site1/ ServerName www.site1.com:443 #SSL SSLEngine on SSLCertificateFile /path/to/ssl/site1.com.crt SSLCertificateKeyFile /path/to/ssl/site1.key SSLCertificateChainFile /path/to/ssl/bundle1.crt </VirtualHost> <VirtualHost www.site2.com:443> DocumentRoot /var/www/site2/ ServerName www.site2.com:443 #SSL SSLEngine on SSLCertificateFile /path/to/ssl/site2.com.crt SSLCertificateKeyFile /path/to/ssl/sit2.key SSLCertificateChainFile /path/to/ssl/bundle2.crt </VirtualHost> 

简而言之,您需要获得更多的IP地址,或者获取证书中有多个名称(SAN或通配符)的证书。

如果你有一个你想要在互联网上投放的网站,SNI真的不可行。 目前还没有足够的浏览器支持它。

在不使用SNI的情况下,您不能拥有与单个IP地址/端口组合关联的多个SSL证书。

唯一的解决办法是使用

  • 多个IP地址,每个IP地址在端口443上侦听。多个IP可能意味着成本增加,具体取决于您所托pipe的用户,还是
  • 1个IP地址,每个都有一个不同的端口。 与此相反的是,你的客户端需要指定URL中的端口,这有点糟糕。

正常的HTTP请求如下所示:

  1. 浏览器将名称(www.example.com)parsing为IP(10.0.0.1)
  2. 浏览器build立到10.0.0.1,端口80的TCP连接
  3. 浏览器发送HTTP请求部分,其中包含“主机:”头,在这种情况下将是“www.example.com”。
  4. Apache使用主机头并将其与基于名称的虚拟主机相匹配,并提供任何内容。

另一方面,HTTPS(即HTTP over SSL)请求的启动方式如下:

  1. 浏览器将名称(www.example.com)parsing为IP(10.0.0.1)
  2. 浏览器build立到10.0.0.1,端口443的TCP连接
  3. 浏览器与服务器协商SSLencryption。 站点名称(www.example.com)在证书中指定,因此在此阶段必须与SSL匹配,否则浏览器将引发SSL连接出现问题的警告。
  4. 浏览器发送HTTP请求等

为什么你不能拥有与10.0.0.1:443相关的不同证书是因为Apache无法知道给哪个传入连接使用哪个证书。