Apache: переписать порты 80 и 443 - настройка нескольких SSL vhosts

НАСТРОИТЬ:

  • несколько доменов SSL настроены на одном IP-адресе с использованием vhosts с разными номерами портов (которые слушает Apache)
  • Apache 2.2.8 на Windows 2003 (нет комментариев к этому PLS)
  • слишком много пользователей Windows XP, поэтому SNI пока не вариант

Могут быть причины, по которым использовать этот подход неправильно, но пока он работает.

настройка vhosts:

# secure domain 1
<VirtualHost IP:443>
  SSL stuff specifying certificate etc.
  ServerName domain1.org
</VirtualHost>

# secure domain 2
<VirtualHost IP:81>
  SSL stuff for domain2.org
  ServerName domain2.org
</VirtualHost>

ЦЕЛЬ: Некоторые папки внутри docroot domain2.org должны быть защищены. Я использовал файл.htaccess, чтобы переписать URL-адрес для https на порт 81:

RewriteEngine On
RewriteCond %{SERVER_PORT} !^81$
RewriteRule (.*) https://%{HTTP_HOST}:81%{REQUEST_URI} [R]

Предположим, я положил.htaccess в папку "secfolder".
При доступе http://domain2.org/secfolder это успешно переписано в https: //domain2.org:81/ secfolder.


ВЫПУСК: При доступе https://domain2.org/secfolder (без порта 81), используется сертификат от первого vhost (domain1.org), и браузер жалуется, что сайт небезопасен, поскольку сертификат недействителен для domain2.org.

я думал так RewriteCond %{SERVER_PORT} !^81$ также переписал бы https://domain2.org в https://domain2.org:81, но это не так. Похоже, что файл.htaccess в этом случае вообще не используется.

На данный момент я не уверен, как применить RewriteRule к https://domain2.org, Я попытался создать дополнительный vhost для domain2 на порте 443 перед тем, как для domain1.org, но Apache, похоже, подавился этим. Я надеюсь, что у кого-то из вас есть идея, как подойти к этому. ТИА.


Изменить: Был ответ, который был удален, но он сказал:
"Вы не можете подключиться к серверу, не проверив сначала сертификат и поскольку сертификат предназначен для неправильного домена, вы не можете перенаправить". Несоответствие сертификата действительно конец строки? После этого невозможно принудительное перенаправление / перезапись URL?

2 ответа

Решение

Помните, что когда вы устанавливаете HTTPS-соединение с https://domain2.org/ (которое действительно является соединением с https://domain2.org/), порядок примерно

  1. Браузер открывает подключение к IP через порт 443
  2. Apache ищет VirtualHost, соответствующий комбинации IP:443
  3. В этом случае он находит VirtualHost для domain1.org
  4. Apache отправляет сертификат SSL, связанный с этим VirtualHost (т. Е. Сертификат для domain1.org)
  5. [Остальная часть согласования SSL]
  6. Браузер отправляет свои заголовки HTTP-запроса, включая заголовок Host:, сообщающий Apache, с каким доменом, по его мнению, он обращается.
  7. Если применимо, обработка mod_rewrite заголовков HTTP-запроса происходит здесь.

то есть, когда Apache решает, какой сертификат отправить, он еще не получил информацию, которую mod_rewrite будет использовать для перенаправления.

Чтобы обойти это, вам понадобится один сертификат, действительный для обоих доменов. Это может быть либо подстановочный сертификат (если ситуация - domain1.example.com и domain2.example.com, получить сертификат для *.example.com), либо вы можете попытаться получить SSL-сертификат с темой "domain1".org", но альтернативное имя субъекта"domain2.org".

В любом случае вам нужно будет выполнить перенаправление в основных конфигурационных файлах Apache - если оно находится в файле.htaccess в DocumentRoot для домена2.org, то запросы, использующие VirtualHost для домена domain1.org, перейдут в другой каталог DocumentRoot и получат Я никогда не видел файл.

У вас есть какой-то подстановочный сертификат или вы пытаетесь разместить разные домены с разными SSL-сертификатами на одном и том же IP?

Если это не подстановочный знак, вы не сможете сделать это, потому что вы можете использовать только один сертификат SSL для каждого IP-адреса, независимо от того, какой порт включен...

Другие вопросы по тегам