Лучший метод для установки нескольких SSL-доменов с перенаправлением

Интересно, какой «лучший» и рекомендуемый метод настройки доменов SSL на одном IP, где есть перенаправления с: 80 на: 443. Это не было полностью рассмотрено здесь, потому что мне нужны эти перенаправления ( https://httpd.apache.org/docs/2.4/vhosts/name-based.html )

Домены определены в DNS и все перенаправляются на один и тот же IP-адрес:

  • Набор 1: example1.com и example1.org (у них один и тот же корневой каталог документов).
  • Набор 2: example2.com и example2.info (они также имеют общий корневой каталог документов).

У меня много проблем с настройкой так, чтобы они были на одном IP-адресе. Идея состоит в том, чтобы сначала определить нормальный:80 виртуальных серверов, которые перехватывают протокол http: // и перенаправляют на https: //. Тогда правильная конфигурация в целом определяется в *: 443 как виртуальный хост на основе имени. Тем не менее, я хотел бы иметь какой-то фиктивный виртуальный хост по умолчанию, который будет иметь пустую страницу в собственном обычном корневом документе, и только когда запрос относится к определенному домену (например, в set1 или set2), должен быть загружен весь виртуальный хост для определенного домена . Я решил не использовать Rewrites, потому что для такой задачи рекомендуются простые редиректы. Использование перенаправления сработало только в моем случае для одного домена.

Моя настройка следующая:

<Virtualhost *:80>
    ServerName example1.com
    Redirect / https://example1.com
</Virtualhost>
<Virtualhost *:80>
    ServerName example1.org
    Redirect / https://example1.org
</Virtualhost>
<VirtualHost *:443>
    ServerName example1.com
    DocumentRoot .......
    .......
</VirtualHost>
<VirtualHost *:443>
    ServerName example1.org
    DocumentRoot .......
    .......
</VirtualHost>
<VirtualHost *:443>
    ServerName example2.com
    DocumentRoot .......
    .......
</VirtualHost>
<VirtualHost *:443>
    ServerName example2.info
    DocumentRoot .......
    .......
</VirtualHost>

Одна из проблем с этой настройкой заключается в том, что она не работает. Другая проблема в том, что это повторяется много раз. Думаю, мне нужно настроить что-то вроде этого (psedoconfig):

фиктивная конфигурация, поймать например чистые IP-запросы и т. д.

<Виртуальный домен для example1.com и .org> если запрошен http, перенаправить на https и для обоих доменов определить одну и ту же настройку определил корневой каталог документов, все журналы и сертификаты для этих доменов и т. д.

<Другой виртуальный пример2 .com и .info> здесь снова - если запрашивается http, перейдите на https общий документ root, логи и т. д.

Я думаю, что с этим справится кто-нибудь, имеющий опыт перенаправления, или, может быть, есть какой-то предпочтительный способ, который я упустил.

РЕДАКТИРОВАТЬ: Хорошо, теперь конфигурация протестирована, и я уверен, что знаю, что у меня есть. И, к сожалению, это не работает.

Я выпустил сертификаты SSL для каждого сайта, использующего acme.sh, набрав (домены изменены из-за конфиденциальности):

acme.sh --issue -d www.AAA.com -d AAA.com -d www.AAA.info -d AAA.info -w /home/path/aaa/www
cd /home/path/aaa/etc
acme.sh --install-cert -d www.AAA.com -d AAA.com -d www.AAA.info -d AAA.info --cert-file cert.pem --key-file priv.pem --fullchain-file fullchain.pem

Это сработало хорошо, но apache conf настроил ТОЛЬКО этот единственный домен в vhost и ssl-часть имела несколько поддельных / старых сертификатов, позволяющих запускать Apache. Сертификат был протестирован, и страница была загружена в браузер с использованием адреса http://AAA.com , который был правильно перенаправлен на https://AAA.com , который также работал.

Затем я перенастроил apache для поддержки домена PPP.com, используя аналогичную процедуру. Это также сработало, когда я настроил apache только для одного домена. Теперь объединение этих двух конфигураций НЕ РАБОТАЕТ, потому что PPP.com распознается как имеющий сертификат AAA.com, который вызывает ошибку NET :: ERR_CERT_COMMON_NAME_INVALID

Итак, я застрял. Вот моя конфигурация apache для виртуальных хостов: https://pastebin.com/hK3g6K3m

Часть, включенная как common.cfg, содержит только стандартные параметры SSL и конфигурацию доступа к каталогу, конфигурацию журналов и т. Д.

0
задан 17 July 2020 в 01:15
2 ответа

Я не пробовал, чего вы хотите достичь, но если бы я попробовал, я бы сделал это так:

  1. используйте постоянное перенаправление для перенаправления всего HTTP-трафика к их аналогам HTTPS (как вы это сделали)
  2. используйте rewriterule во всех «вторичных» виртуальных хостах, чтобы переписать запросы, отправляемые на «первичный» виртуальный хост, на котором вы принимаете запрос и отвечаете на них (это также сохраните URL-адрес вторичного виртуального хоста, доступный посетителю вашего веб-сайта)
  3. используйте include, чтобы избежать повторения: поместите все, что может быть общим для этих виртуальных хостов (например, директивы кеша, SSL и т. д.), в один или несколько текстовых файлов, которые вы затем включите в определения виртуального хоста.
1
ответ дан 4 January 2021 в 09:24

При выполнении ssl вы должны учитывать свои сертификаты. Например, если у вас есть один сертификат для example1.com и example1.org, вы можете просто создать один VirtualHost с основным ServerName и вторичным (или несколькими) ServerAlias ​​. Если у вас есть независимые сертификаты для каждого домена,вам необходимо разделить все на отдельные VirtualHost , поскольку у вас не может быть несколько сертификатов на одном уровне.

Кроме того, в версиях до 2.4 NameVirtualHost *: 443 равно ] обязательный перед любым VirtualHost для apache для выполнения части SNI, то есть для отображения запрашиваемого сертификата, а не сертификата по умолчанию.

https по умолчанию будет первым VirtualHost *: 443 вы определяете, поэтому просто перемещайте их по своему усмотрению.

Что касается части http, если все будет перенаправлено на саму версию https (ничто не обслуживается http), вы можете создать единый VirtualHost *: 80 со всеми необходимыми ServerAlias ​​ (это не обязательно, но для пояснения) и использовать одно RewriteRule , например:

RewriteRule "^/?(.*)"        "https://%{HTTP_HOST}/%1" [L,R,NE]

Я не тестировал его, но он должен работать.

ПРИМЕЧАНИЕ: я не использую Redirect , потому что я не знаю, позволяет ли это окружение tal переменной в части замены, но вы также можете попробовать это.

1
ответ дан 4 January 2021 в 09:24

Теги

Похожие вопросы