Как настроить Apache для показа только одного хоста на протоколе HTTPS

Я имею Apache веб-сервера на FreeBSD и хочу связать SSL только с одним из многих доменов. Теперь моя конфигурация

NameVirtualHost *:80

<VirtualHost *:80>
DocumentRoot /home/web/web/domain01.com
ServerName domain01.com
ServerAlias www.domain01.com
</VirtualHost>

<VirtualHost *:80>
DocumentRoot /home/web/web/ssldomain.com
ServerName ssldomain.com
ServerAlias www.ssldomain.com
</VirtualHost>

<VirtualHost *:443>
DocumentRoot "/home/web/web/ssldomain.com"
ServerName www.ssldomain.com 
ServerAlias ssldomain.com
SSLEngine on
SSLCipherSuite ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP:+eNULL
SSLCertificateFile "/usr/local/etc/apache22/ssl/www.ssldomain.com.crt"
SSLCertificateKeyFile "/usr/local/etc/apache22/ssl/private.key"
SSLCertificateChainFile "/usr/local/etc/apache22/ssl/intermediate.crt"
</VirtualHost>

Все хорошо, но в браузере на https://www.domain01.com/показывают страницы сайта ssldomain.com. Это плохо.

Как я могу настроить Apache для предотвращения страниц показа ssldomain.com на https://www.domain01.com в браузере.

UPD: Я пытался определить VirtualHosts:80 и:443 для обоих доменов. 1) использование исходного SSL ssldomain.com для обоих доменов; 2) использование исходного SSL для ssldomain.com и самоподписанного SSL для domain01.com. В обоих случаях браузер показывает ошибку сертификата на HTTPS, но страницы являются правильными.

Конфигурация для этого два случая

Include etc/apache22/extra/httpd-ssl.conf

NameVirtualHost *:80
NameVirtualHost *:443

<VirtualHost *:80>
DocumentRoot /home/web/web/domain01.com
ServerName domain01.com
ServerAlias www.domain01.com
</VirtualHost>

<VirtualHost *:443>
DocumentRoot /home/web/web/domain01.com
ServerName domain01.com
ServerAlias www.domain01.com
SSLEngine on
SSLCertificateFile "/usr/local/etc/apache22/ssl/domain01.com/server.cert"
SSLCertificateKeyFile "/usr/local/etc/apache22/ssl/domain01.com/server.key"
# This is for second case (of course 2 lines above are comments)
# SSLCipherSuite ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP:+eNULL
# SSLCertificateFile "/usr/local/etc/apache22/ssl/www.ssldomain.com.crt"
# SSLCertificateKeyFile "/usr/local/etc/apache22/ssl/private.key"
# SSLCertificateChainFile "/usr/local/etc/apache22/ssl/intermediate.crt"

#Redirect permanent / http://www.domain01.com/
</VirtualHost>

<VirtualHost *:80>
DocumentRoot /home/web/web/ssldomain.com
ServerName ssldomain.com
ServerAlias www.ssldomain.com
</VirtualHost>

<VirtualHost *:443>
DocumentRoot "/home/web/web/ssldomain.com"
ServerName www.ssldomain.com 
ServerAlias ssldomain.com
SSLEngine on
SSLCipherSuite ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP:+eNULL
SSLCertificateFile "/usr/local/etc/apache22/ssl/www.ssldomain.com.crt"
SSLCertificateKeyFile "/usr/local/etc/apache22/ssl/private.key"
SSLCertificateChainFile "/usr/local/etc/apache22/ssl/intermediate.crt"
</VirtualHost>

С наилучшими пожеланиями!

1
задан 3 October 2015 в 21:54
2 ответа

Apache по умолчанию будет использовать первый виртуальный хост для этого IP-адреса (или подстановочные знаки, соответствующие как * в этом случае) и порт (443), если он не может найти виртуальный хост с совпадающим ServerName или ServerAlias. Таким образом, вам нужно настроить отдельный сайт для www.domain01.com на порту 443, как вы это сделали для www.ssldomain.com:443, чтобы он не возвращался к единственному, который у вас есть по умолчанию.

Этот виртуальный хост может быть настроен для перенаправления обратно на HTTP, если вы хотите (обратите внимание, что это перенаправление выполняется после согласования SSL, поэтому по-прежнему требуется действующий сертификат - каждый виртуальный хост SSL требует, чтобы сертификат был настроен для него, хотя вы можете использовать тот же сертификат, если он действителен и для этого виртуального хоста).

В этом случае, как получается, что вы не получаете ошибку сертификата на https://www.domain01.com ? Я бы предположил, что либо вы (и только если вы проигнорируете это, вы увидите содержимое www.ssldomain.com), либо ваш сертификат охватывает оба домена (в этом случае настройка этого как отдельного vhost и перенаправление обратно на http определенно

Между прочим, вопреки распространенному мнению, вам не нужен отдельный IP-адрес для настройки нескольких хостов SSL на экземпляре Apache - даже для старых браузеров, которые не поддерживают SNI. Есть еще одна работа. Подробнее см. Здесь: Отключение SNI для определенного виртуального хоста на Apache

2
ответ дан 3 December 2019 в 20:47

Это работает на меня, я меняю только порядок доменов - первый - ssldomain.com с оригинальным SSL-сертификатом, а второй - domain01.com с тем же SSL-сертификатом и редирект.

Include etc/apache22/extra/httpd-ssl.conf

NameVirtualHost *:80
NameVirtualHost *:443

<VirtualHost *:80>
DocumentRoot /home/web/web/ssldomain.com
ServerName ssldomain.com
ServerAlias www.ssldomain.com
</VirtualHost>

<VirtualHost *:443>
DocumentRoot "/home/web/web/ssldomain.com"
ServerName www.ssldomain.com 
ServerAlias ssldomain.com
SSLEngine on
SSLCipherSuite ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP:+eNULL
SSLCertificateFile "/usr/local/etc/apache22/ssl/www.ssldomain.com.crt"
SSLCertificateKeyFile "/usr/local/etc/apache22/ssl/private.key"
SSLCertificateChainFile "/usr/local/etc/apache22/ssl/intermediate.crt"
</VirtualHost>

<VirtualHost *:80>
DocumentRoot /home/web/web/domain01.com
ServerName domain01.com
ServerAlias www.domain01.com
</VirtualHost>

<VirtualHost *:443>
DocumentRoot /home/web/web/domain01.com
ServerName domain01.com
ServerAlias www.domain01.com
SSLEngine on
SSLCipherSuite ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP:+eNULL
SSLCertificateFile "/usr/local/etc/apache22/ssl/www.ssldomain.com.crt"
SSLCertificateKeyFile "/usr/local/etc/apache22/ssl/private.key"
SSLCertificateChainFile "/usr/local/etc/apache22/ssl/intermediate.crt"

Redirect permanent / http://www.domain01.com/
</VirtualHost>

Особая благодарность @BazzaDP.

.
0
ответ дан 3 December 2019 в 20:47

Теги

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