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

Apache обслуживает сертификат из другого домена

У меня есть сервер с веб-сервером Apache (2.4.25) для нескольких доменов и их поддоменов.

В настоящее время я настроил каждый файл VirtualHost с одинаковой структурой, сгенерировал сертификат SSL для каждого домена / поддомена через certbot. Все мои сайты работают нормально, кроме одного.

VirtualHost (: 80 и: 443 находятся в отдельных файлах)

<VirtualHost domain2.org:80>
    ServerName domain2.org
    DocumentRoot /var/www/domain2.org

    RewriteEngine On
    RewriteCond %{REQUEST_URI} !^/\.well-known/acme-challenge/.*
    RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [QSA,L,R=301]
</VirtualHost>

<VirtualHost domain2.org:443>
    ServerName domain2.org
    DocumentRoot /var/www/domain2.org

    SSLEngine on
    SSLCertificateFile /etc/letsencrypt/live/domain2.org/fullchain.pem
    SSLCertificateKeyFile /etc/letsencrypt/live/domain2.org/privkey.pem
</VirtualHost>

Я создал сертификаты с помощью следующей команды:

certbot certonly --webroot --webroot-path /var/www/domain2.org -d domain2.org

Учитывая, что у меня есть следующие домены:

domain1.org
sub.domain1.org
domain2.org
sub.domain2.org
domain3.org

Тогда, когда я хочу навестить domain2.org с Firefox (59.0.3) я получаю несоответствие сертификата. В нем говорится, что сервер отправляет сертификат для sub.domain1.org.

Дополнительная информация: sub.domain1.org это первый файл в каталоге (по алфавиту)

Кто-нибудь знает, что не так с моей конфигурацией или сервером?

Определением вашего виртуального хоста должны быть порты, которые прослушивает apache, а не связанные с доменом. Конкретно этот бит:

<VirtualHost domain2.org:80>

Обычно это либо IP: PORT, либо *: PORT, последнее указывает на то, что вы хотите, чтобы этот виртуальный хост привязывался к любому IP в системе, а не к определенному IP.

Кроме того, это относится к строкам прослушивания, которые у вас есть (в системах на основе debian) /etc/apache2/ports.conf - они будут иметь форму listen 80, listen IP: 80, ваше определение VirtualHost должно соответствовать этому.

Apache, вероятно, разрешает domain2.org на ваш IP-адрес при инициализации, и если ваш DNS не был обновлен или кеш DNS все еще действует, он разрешит неправильный IP-адрес.

Чтобы узнать, какие ip / порты прослушивает apache и какой сервер ServerName определил для каждого виртуального хоста, снова в системах на основе debian вы можете использовать следующую команду:

apache2ctl -S

Краткая форма, вы, вероятно, хотите, чтобы ваше определение VirtualHost как

<VirtualHost *:80>

или

<VirtualHost *:443>

Я предполагаю, что вы используете «достаточно новую» версию OpenSSL, которая поддерживает SNI, технологию, позволяющую использовать несколько сертификатов SSL на одном IP-адресе сервера.