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

Apache 2 - несколько сайтов SSL с несколькими виртуальными хостами

У меня около 10 сайтов в Apache 2. Это все отдельные сайты, а не поддомены. У меня есть сертификаты SSL для двух из них, и я хотел бы настроить SSL для них обоих и не заставлять мои сайты, не использующие SSL, использовать любой из них.

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

Я читал об этом, и похоже, что, хотя мой сервер может поддерживать SSI, Windows XP не поддерживает его, так что это не будет жизнеспособным вариантом. Кроме того, я кратко изучил mod_gnutils, но я не могу гарантировать, что это будет делать то, что я хочу, и мне также не очень удобно делать всю необходимую установку / настройку, чтобы это работало, если мне это абсолютно не нужно.

Мы будем очень признательны за любые предоставленные мне указания по этому поводу!

вот два 443 виртуальных хоста. Я пробовал ссылаться на виртуальные хосты, как вы видите ниже, а также на другие варианты, такие как просто «и». Я также играл со ссылками на NameVirtualHost, но все равно безрезультатно.

Listen 443
NameVirtualHost www.site1.com:443
NameVirtualHost www.site2.com:443

<VirtualHost www.site1.com:443>
 DocumentRoot /var/www/site1/
 ServerName  www.site1.com:443

 #SSL 
 SSLEngine on
 SSLCertificateFile /path/to/ssl/site1.com.crt
 SSLCertificateKeyFile /path/to/ssl/site1.key
 SSLCertificateChainFile /path/to/ssl/bundle1.crt 

</VirtualHost>

<VirtualHost www.site2.com:443>
 DocumentRoot /var/www/site2/
 ServerName  www.site2.com:443

 #SSL 
 SSLEngine on
 SSLCertificateFile /path/to/ssl/site2.com.crt
 SSLCertificateKeyFile /path/to/ssl/sit2.key
 SSLCertificateChainFile /path/to/ssl/bundle2.crt  

</VirtualHost>

Короткий ответ заключается в том, что вам нужно либо получить дополнительные IP-адреса, либо получить сертификат с несколькими именами в сертификате (SAN или подстановочный знак).

SNI действительно невозможен, если у вас есть сайт, который вы хотите обслуживать в Интернете. Пока еще недостаточно браузеров, которые его поддерживают.

Без использования SNI вы не можете иметь несколько сертификатов SSL, связанных с одной комбинацией IP-адреса / порта.

Единственное решение для вас - использовать либо

  • несколько IP-адресов, каждый из которых прослушивает порт 443. Использование нескольких IP-адресов может означать увеличение стоимости, в зависимости от того, с кем вы размещаетесь, или
  • 1 IP-адрес, каждый с отдельным портом. Обратной стороной является то, что вашим клиентам нужно будет указывать порт в URL-адресе, что немного отстой.

Обычный HTTP-запрос начинается так:

  1. Браузер разрешает имя (www.example.com) в IP (10.0.0.1)
  2. Браузер устанавливает TCP-соединение с 10.0.0.1, порт 80
  3. Браузер отправляет HTTP-запрос, часть которого включает заголовок «Host:», который в данном случае будет «www.example.com».
  4. Apache использует заголовок хоста и сопоставляет его с виртуальным хостом на основе имени и обслуживает все, что там есть.

С другой стороны, запрос HTTPS (т.е. HTTP через SSL) начинается следующим образом:

  1. Браузер преобразовывает имя (www.example.com) в IP (10.0.0.1)
  2. Браузер устанавливает TCP-соединение с 10.0.0.1, порт 443
  3. Браузер согласовывает SSL-шифрование с сервером. Имя сайта (www.example.com) указано в сертификате, поэтому на этом этапе он должен соответствовать SSL, иначе браузер выдает предупреждение о том, что с SSL-соединением что-то не так.
  4. Браузер отправляет HTTP-запрос и т. Д.

Причина, по которой у вас не может быть разных сертификатов, связанных с 10.0.0.1:443, заключается в том, что Apache не сможет узнать, какой из них использовать для любого входящего соединения.