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

Как запретить Apache обслуживать сайт HTTPS, если он не соответствует запрошенному имени VirtualHost?

Я использую Apache2 и именованные виртуальные хосты для обслуживания двух разных доткомов (exampleone.com и exampletwo.com) с одного IP-адреса. Один сайт (exampleone.com должен быть HTTP и HTTPS, а другой (example2.com) должен обслуживать только HTTP.

Пока что их соответствующие HTTP-сайты работают, как ожидалось, и HTTPS работает для сайта, для которого он предназначен, но когда я перехожу к https://exampletwo.com Меня обслуживают https://exampleone.com предупреждения о содержании и безопасности.

Как я могу получить https://exampletwo.com запросы на отклонение?

<VirtualHost 1.2.3.4:80>
    ServerName exampleone.com
    ServerAlias *.exampleone.com
    DocumentRoot /var/www/exampleone.com
    <Directory /var/www/exampleone.com>
            Options MultiViews
            AllowOverride None
            Order allow,deny
            allow from all
    </Directory>
    CustomLog /var/log/apache2/exampleone.log combined
</VirtualHost>

<VirtualHost 1.2.3.4:80>
    ServerName exampletwo.com
    ServerAlias *.exampletwo.com
    DocumentRoot /var/www/exampletwo.com
    <Directory /var/www/exampletwo.com>
            Options MultiViews
            AllowOverride None
            Order allow,deny
            allow from all
    </Directory>
    CustomLog /var/log/apache2/exampletwo.log combined
</VirtualHost>

<IfModule mod_ssl.c>
<VirtualHost 1.2.3.4:443>
    ServerAdmin admin@exampleone.com
    ServerName exampleone.com
    ServerAlias *.exampleone.com

    DocumentRoot /var/www/exampleone.com

    <Directory /var/www/exampleone.com>
            Options MultiViews
            AllowOverride None
            Order allow,deny
            allow from all
    </Directory>

    CustomLog /var/log/apache2/exampleone-ssl.log combined

    #   SSL Engine Switch:
    #   Enable/Disable SSL for this virtual host.
    SSLEngine on

    #   A self-signed (snakeoil) certificate can be created by installing
    #   the ssl-cert package. See
    #   /usr/share/doc/apache2.2-common/README.Debian.gz for more info.
    #   If both key and certificate are stored in the same file, only the
    #   SSLCertificateFile directive is needed.
    SSLCertificateFile    /etc/ssl/certs/exampleone.com.crt
    SSLCertificateKeyFile /etc/ssl/private/exampleone.com.key
</VirtualHost>
</IfModule>

Вы можете включить SNI. Все, что вам нужно сделать, это включить NameVirtualHost *:443 с вашим Listen 443 оператор (в конфигурации ubuntu apache добавьте его в /etc/apache/ports.conf). Затем вы можете настроить второй виртуальный хост SSL и дать им обоим ServerName.

Примечание: старые браузеры не поддерживают SNI. Например, нет версии IE для Windows XP. В этом случае IP-адрес для каждого ограничения сайта, упомянутого пользователем2299bla, является действительным.

РЕДАКТИРОВАТЬ: как указали другие, посмотрите SNI

Как объяснено Вот, сервер, с которым связываются через https, не может угадать перед отправкой своего сертификата, с каким доменным именем клиент хочет поговорить.

Если http://exampleone.com обслуживается по https, это означает, что первое, что посетитель получит с этого сервера, это «Привет, мой сертификат действителен для имени http://exampleone.com", даже если ты хочешь http://exampletwo.com. Таким образом, вы не можете деактивировать https для http://exampletwo.com, ни настроить перенаправление или что-то еще, что не привело бы к предупреждению для посетителя.

Больше объяснений здесь

Чтобы решить вашу проблему, вам понадобятся два разных IP-адреса для обслуживания двух ваших доменных имен.