Apache - несколько SSL-сертификатов, опровергающих друг друга

300
Phil Gibson

У меня на одном из наших серверов есть два SSL-сертификата, работающие для двух проектов, один из которых - это SSL-символ с подстановочными знаками, выдаваемый только для этого домена, который я назову domain2.com . domain1.com, другой домен имеет домен, выданный только одному поддомену, называемый серверами .

Благодаря тому, что domain2 позволяет пользователям проекта создавать субдомены, он имеет настройку VirtualHost, которая выглядит следующим образом:

<VirtualHost *:443> <Directory /var/www/domain2> Options Indexes FollowSymLinks MultiViews AllowOverride All Require all granted </Directory> #There's a SSL redirection here - #stackexchange network detected it as a URL shortener, so removed from question SSLEngine on SSLCertificateFile /app/domain2/certs/domain2.com.pem SSLCertificateKeyFile /app/domain2/certs/domain2.com.key SSLCertificateChainFile "/app/domain2/certs/fullchain.pem" SSLCACertificatePath "/app/domain2/certs/" SSLCACertificateFile "/app/domain2/certs/cacert.pem" ServerAdmin webmaster@localhost DocumentRoot /var/www/domain2 ErrorLog $/error.log CustomLog $/access.log combined </VirtualHost> 

Это прекрасно работает, однако servers.domain1.com SSL не работает (который выдается на letsencrypt, domain2.com выпускается с AlphaSSL

<VirtualHost servers.domain1.com:443> <Directory /app/corporate/mediaserver/public> Options Indexes FollowSymLinks MultiViews AllowOverride All Require all granted </Directory> #There's a SSL redirection here - #stackexchange network detected it as a URL shortener, so removed from question SSLEngine on SSLCertificateFile /app/corporate/mediaserver/certs/[redacted] SSLCertificateKeyFile /app/corporate/mediaserver/certs/[redacted] SSLCACertificatePath /app/corporate/mediaserver/certs/[redacted] SSLCACertificateFile /app/corporate/mediaserver/certs/[redacted] ServerName servers.domain1.com ServerAdmin webmaster@localhost DocumentRoot /app/corporate/mediaserver/public ErrorLog $/error.log CustomLog $/access.log combined </VirtualHost> 

Когда я загружаю servers.domain1.com он пытается загрузить в SSL из шаблона, однако, если я установить <VirtualHost>на <VirtualHost domain1.com:443>и загрузить domain1.com он загружает SSL от правильного (servers.domain1.com VirtualHost просто игнорируется).

Загрузка servers.domain2.com (фактический tld .io)

1
У вас есть разные IP-адреса для каждого домена, или все они имеют один IP-адрес? grawity 6 лет назад 0
У них один и тот же IP-адрес @grawity Phil Gibson 6 лет назад 0
Ну, это твоя проблема. grawity 6 лет назад 0

1 ответ на вопрос

1
grawity

Первое: параметр в <VirtualHost …>не работает таким образом. В системах «один IP на домен» он предназначен для указания того, к какому IP-адресу будет привязан веб-сервер (то есть к какому адресу он будет получать соединения) для этого виртуального хоста. Он не предназначен для выбора виртуального хоста на основе HTTP «Host:» или TLS SNI.

Тем не менее, вы говорите в комментариях, что у вас есть только один IP-адрес (поэтому вы хотите использовать TLS SNI). В этом случае все блоки виртуальных хостов должны быть привязаны к одному *и тому же адресу, а фактическое имя домена должно быть указано как ServerName.

Второе: в конфигурации Apache первый соответствующий блок VirtualHost побеждает. Если у вас есть подстановочный знак ServerName над точными совпадениями, он всегда будет выбран. Поэтому убедитесь, что ваши виртуальные хосты упорядочены правильно.

# The specific subdomains go first...  <VirtualHost *:443> ServerName servers.domain1.com DocumentRoot /app/corporate/mediaserver/public SSLEngine on SSLCertificateFile /app/corporate/mediaserver/certs/fullchain.pem SSLCertificateKeyFile /app/corporate/mediaserver/certs/privkey.pem </VirtualHost>  # ...and the wildcard is last:  <VirtualHost *:443> ServerName domain1.com ServerAlias *.domain1.com DocumentRoot /var/www/domain2 SSLEngine on SSLCertificateFile /app/domain2/certs/fullchain.pem SSLCertificateKeyFile /app/domain2/certs/domain2.com.key </VirtualHost> 

(Эта SSLCertificateChainFileнастройка устарела в Apache 2.4. SSLCA*Настройки предназначены для аутентификации клиента - если вы ее не используете, они вам тоже не нужны.)