Назад | Перейти на главную страницу

Остановить ответ SSL по умолчанию на общем IP с помощью SNI

Раньше я задавал здесь вопрос: Единый домен SSL представлен для всех доменов на общем IP о настройке безопасных и незащищенных доменов на одном IP.

Мнения были смешанными, но похоже, что решение принято в SNI. К сожалению, я не могу заставить его работать должным образом.

Я хочу, чтобы мой сервер отправлял сертификат только для domaina.com и никаких других имен хостов, даже если это означает отправку ошибки 403 клиентам, не относящимся к SNI. Моя текущая конфигурация на ванильном Ubuntu Server 12.04 LTS ниже:

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-адресе.

Сейчас у вас есть оба домена (domaina.com и domainb.com) на одном IP-адресе. Затем вы открыли порт 80 для HTTP и порт 443 для HTTPS. Как вы заметили, порт открыт для всех доменов на сервере; он не может быть закрыт только для одного домена, оставаясь открытым для любого другого.

Если вы вообще не хотите, чтобы SSL был открыт для domainb.com, вам нужно будет поместить domainb.com на отдельный IP-адрес.

В качестве альтернативы вы можете просто использовать .htaccess для соответствующего перенаправления запросов. Не лучшее решение, но если вам нужно использовать один IP-адрес, это может сработать для вас.

Итак, домен .htaccess domaina.com может иметь что-то вроде

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