如何防止其他 Apache 2.2 多个 VirtualHosts 域使用 SNI 访问 https(SSL_ERROR_BAD_CERT_DOMAIN)?

如何防止其他 Apache 2.2 多个 VirtualHosts 域使用 SNI 访问 https(SSL_ERROR_BAD_CERT_DOMAIN)?

我在 Linode 服务器上的 Ubuntu 14.04.4 LTS 上运行 Apache 2.2。我在这台机器上托管了多个域(只有 1 个 IP 地址)。

我在这里托管了一个域名 tbw.com,我有一个 SSL 证书,我想让所有http://tbw.comhttp://www.tbw.com重定向到的查询https://www.tbw.com(这在当前配置中发生)

我也有rf.com和其他网站,它们运行良好http://rf.comhttp://www.rf.com

然而,当我尝试访问https://www.rf.com,它会给出一个错误:

Your connection is not secure
...
www.rf.com uses an invalid security certificate. 

The certificate is only valid for the following names: www.tbw.com, tbw.com 
Error code: SSL_ERROR_BAD_CERT_DOMAIN
  1. 我不希望发生这种情况 - 我宁愿它显示非 SSL 域的标准/预期的“安全连接失败”错误。
  2. 我可以在同一台机器(同一 IP 地址)上安装具有 SSL 证书的其他域名吗?

我已查看以下帖子,但我认为答案已经过时,因为 SNI(服务器名称指示)现在已经存在。

同一 IP 上有多个带 SSL 的域名

如何防止没有证书的域访问 https://?

我的配置文件:

/etc/apache2/apache2.conf

...
<Directory /var/www/>
        Options Indexes FollowSymLinks
        AllowOverride All
        Require all granted
</Directory>
...

/etc/apache2/ports.conf

NameVirtualHost *:80
NameVirtualHost *:443

Listen 80
...

/etc/apache2/sites-available/tbw.com.conf

<VirtualHost *:80>
   ServerName tbw.com
   ServerAlias www.tbw.com
   DocumentRoot /var/www/html/tbw.com/public_html
   Redirect permanent / https://www.tbw.com/
</VirtualHost>

<IfModule mod_ssl.c>
    <VirtualHost www.tbw.com:443>
        ServerAdmin [email protected]
        ServerName www.tbw.com
        DocumentRoot /var/www/html/tbw.com/public_html

        # Log file locations
        LogLevel warn
        ErrorLog  /var/www/html/tbw.com/log/error.log
        CustomLog /var/www/html/tbw.com/log/access.log combined

        SSLEngine on
        SSLCertificateFile /etc/apache2/ssl/tbw.com/www_tbw_com.crt
        SSLCertificateKeyFile /etc/apache2/ssl/tbw.com/tbw.key
        SSLCertificateChainFile  /etc/apache2/ssl/tbw.com/www_tbw_com.ca-bundle
        <FilesMatch "\.(cgi|shtml|phtml|php)$">
                        SSLOptions +StdEnvVars
        </FilesMatch>
        <Directory /usr/lib/cgi-bin>
                        SSLOptions +StdEnvVars
        </Directory>
        BrowserMatch "MSIE [2-6]" \
                        nokeepalive ssl-unclean-shutdown \
                        downgrade-1.0 force-response-1.0
        BrowserMatch "MSIE [17-9]" ssl-unclean-shutdown
    </VirtualHost>
</IfModule>

答案1

我不希望发生这种情况 - 我宁愿它显示非 SSL 域的标准/预期的“安全连接失败”错误。

在这种情况下,您必须将 apache 配置为不接受任何不支持 SNI 的客户端,即SSLStrictSNIVHostCheck on。在这种情况下,没有配置证书的虚拟主机应该会导致客户端出现错误,即无效的服务器名称或握手错误(取决于浏览器)。

我可以在同一台机器(同一 IP 地址)上安装具有 SSL 证书的其他域名吗?

只要客户端使用 SNI(所有现代浏览器都使用),这应该是可能的。

相关内容