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

esr*_*ryl 2 ssl sni apache-2.2

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

意见不一,但似乎 SNI 持有解决方案。不幸的是,我无法按要求工作。

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

配置文件

…
<IfModule mod_ssl.c>
    NameVirtualHost *:443
    Listen 443
</IfModule>
…
Run Code Online (Sandbox Code Playgroud)

域 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>
Run Code Online (Sandbox Code Playgroud)

域 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>
Run Code Online (Sandbox Code Playgroud)

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
Run Code Online (Sandbox Code Playgroud)

如何摆脱默认设置?

Jen*_*y D 5

在将两个域保持在同一 IP 地址上的同时,您实际上无法执行您所要求的操作。

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

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

  • 澄清一下:如果您想在同一个 IP 上拥有不同的 SSL 主机,那么 SNI 是您的朋友。如果您希望某些域拥有 SSL 而其他域没有它,那么您需要在 IP 级别将它们分开。 (2认同)