使用SNI停止共享IP上的默认SSL响应

以前我在这里问过一个问题: 在共享IP上为所有域提供的单域SSL关于在单个IP上设置安全和非安全域。

意见不一,但似乎SNI持有解决scheme。 不幸的是,我不能按要求工作。

  • https://domaina.com – 按预期工作
  • https://domainb.com – 介绍domaina.com证书,而不是预期的。 我希望它不响应SSL请求。

我希望我的服务器只发送domaina.com的证书domaina.com发送其他主机名,即使这意味着向非SNI客户端发送403错误。 我在香草Ubuntu Server 12.04 LTS上的当前configuration如下:

Ports.conf

 … <IfModule mod_ssl.c> NameVirtualHost *:443 Listen 443 </IfModule> … 

域虚拟主机

 <VirtualHost *:80> ServerName domaina.com ServerAlias www.domaina.com DocumentRoot /var/www/domaina.com/public ErrorLog /var/www/domaina.com/logs/error.log CustomLog /var/www/domaina.com/logs/access.log combined </VirtualHost> <IfModule mod_ssl.c> <VirtualHost *:443> ServerName domaina.com ServerAlias www.domaina.com DocumentRoot /var/www/domaina.com/public SSLEngine on SSLCertificateFile /etc/apache2/ssl/domaina.com.crt SSLCertificateKeyFile /etc/apache2/ssl/domaina.key SSLCertificateChainFile /etc/apache2/ssl/domaina.com.ca-bundle </VirtualHost> </IfModule> 

域B虚拟主机

 <VirtualHost *:80> ServerName domainb.com ServerAlias www.domainb.com DocumentRoot /var/www/domainb.com/public ErrorLog /var/www/domainb.com/logs/error.log CustomLog /var/www/domainb.com/logs/access.log combined </VirtualHost> 

apache2ctl -S

 VirtualHost configuration: wildcard NameVirtualHosts and _default_ servers: *:443 is a NameVirtualHost default server domaina.com (/etc/apache2/sites-enabled/domaina.com:12) port 443 namevhost domaina.com (/etc/apache2/sites-enabled/domaina.com:12) *:80 is a NameVirtualHost default server domaina.com (/etc/apache2/sites-enabled/domaina.com:3) port 80 namevhost domaina.com (/etc/apache2/sites-enabled/domaina.com:3) port 80 namevhost domainb.com (/etc/apache2/sites-enabled/domainb.com:1) Syntax OK 

你怎么能摆脱默认?

在保持两个域位于相同的IP地址的情况下,你实际上无法做你正在问的问题。

就像现在一样,您在同一个IP地址上有两个域(domaina.com和domainb.com)。 然后,您已经为HTTP打开了端口80,为HTTPS打开了端口443。 您已经注意到,该端口对服务器上的所有域都是开放的; 它不能closures只有一个域,而保持任何其他开放。

如果您不希望SSL根本打开domainb.com,则需要将domainb.com放在一个单独的IP地址上。

或者,您可以使用.htaccess来适当地redirect请求。 不是最好的解决scheme,但是如果你必须使用一个IP,那可能适合你。

所以,domaina.com的.htaccess可能有类似的东西

 #redirect domainb https requests RewriteCond %{HTTP_HOST} ^domainb.com$ RewriteRule ^(.*)$ http://domainb.com%{REQUEST_URI} [L,R=301]