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

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

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

大家的意见不一,但看来 SNI 是解决方案。不幸的是,我无法让它按要求工作。

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

端口配置文件


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

域名A虚拟主机

<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

如何摆脱默认设置?

答案1

在将两个域名保持在同一个 IP 地址上的同时,你实际上无法完成你所要求的事情。

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

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

答案2

或者,您可以只使用 .htaccess 来适当地重定向请求。这不是最好的解决方案,但如果您必须使用单个 IP,那么这可能适合您。

因此,domaina.com 的 .htaccess 可能有类似内容

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

相关内容