У меня есть сервер apache с одним IP-адресом. (на сервере debian).
У меня есть несколько виртуальных хостов для http и один виртуальный хост для https
один виртуальный хост, перенаправьте трафик на виртуальный хост https, и это отлично работает, примерно так
<VirtualHost *:80>
ServerName mymainsite.com
ServerAlias www.mymainsite.com
ServerAlias myothersite.org
ServerAlias www.myothersite.org
RewriteEngine on
RewriteRule ^(.*)$ https://www.mymainsite.com$1 [L,R=301]
(...)
У меня есть еще один vhost для https, вот так
<VirtualHost *:443>
ServerName www.mymainsite.com
(...)
и это работает нормально, все не https перенаправляются на https, и это супер ... но тогда проблема.
иногда люди переходят на этот URL https://www.myothersite.org
и на это отвечает https vhost, что создает ошибку «неправильный сертификат».
Вопрос: есть ли способ предотвратить это, не используя второй IP-адрес или покупая SSL-сертификат с несколькими URL-адресами или подстановочными знаками?
изменить: просто удалите лишний текст
Вам необходимо использовать расширение SSL с именем Индикация имени сервера (SNI). Это расширение позволит серверу определить, для какого именованного виртуального хоста был предназначен запрос, и исправить его соответствующим образом.
Ваш apache, вероятно, построен с поддержкой SNI, но для проверки просто настройте два виртуальных хоста с именами на своем IP-адресе, порт 443 и попробуйте запустить apache. Если ваш apache не поддерживает SNI, error_log покажет: «Не следует использовать виртуальные хосты на основе имен вместе с SSL !!» Если SNI встроен, в журнале ошибок будет отображаться «[предупреждение] Инициализация: виртуальные хосты SSL на основе имени работают только для клиентов с поддержкой указания имени сервера TLS (RFC 4366)».
Также имейте в виду, что браузеры также должны поддерживать SNI, чтобы это работало. Хорошо, что все основные браузеры поддерживают
Итак, да, короче говоря, у вас может быть 2 или более разных домена с соответствующими сертификатами SSL на одном IP-адресе, просто настройте другие домены SSL так же, как ваш первый. Если ваш apache не поддерживает SNI, вам нужно будет найти другой пакет apache или перестроить его с поддержкой SNI, чтобы заставить его работать.