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/), порядок примерно
- Браузер открывает подключение к IP через порт 443
- Apache ищет VirtualHost, соответствующий комбинации IP:443
- В этом случае он находит VirtualHost для domain1.org
- Apache отправляет сертификат SSL, связанный с этим VirtualHost (т. Е. Сертификат для domain1.org)
- [Остальная часть согласования SSL]
- Браузер отправляет свои заголовки HTTP-запроса, включая заголовок Host:, сообщающий Apache, с каким доменом, по его мнению, он обращается.
- Если применимо, обработка 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-адреса, независимо от того, какой порт включен...