Имя виртуального хоста Apache с SSL
-
21-08-2019 - |
Вопрос
Я пытаюсь настроить наши серверы для разрешения трафика через SSL.Я знаю, что SSL не работает с виртуальным хостом имени, но у нас есть все наши серверы Apache на виртуальных машинах с выделенными частными IP-адресами.У нас есть основная виртуальная машина с настройкой mod_proxy для маршрутизации трафика на соответствующие виртуальные машины.
Однако для маршрутизации https-трафика нам необходимо установить сертификат на прокси-сервере, а также на виртуальной машине.У нас есть подстановочный сертификат, который можно использовать на всех наших хостах.Кажется, все работает правильно, но в журналах Apache для прокси-сервера я получаю следующее:
[предупреждение] Инициализация:Конфликт IP/порта SSL-сервера:host1.domain.com:443 (/etc/apache2/sites-enabled/host1:1) против.хост2.домен.com:443 (/etc/apache2/sites-enabled/host2:1)
Для каждого хоста, настроенного на прокси-сервере, имеется одно из этих сообщений об ошибке.Наша настройка виртуального хоста для прокси опубликована ниже:
<VirtualHost ipaddress:443>
ServerName host1.domain.com
ProxyPreserveHost On
ProxyRequests Off
ProxyPass / https://privateip:443/
ProxyPassReverse / https://privateip:443/
SSLProxyEngine on
SSLEngine on
SSLCertificateFile /etc/ssl/certs/server.crt
SSLCertificateKeyFile /etc/ssl/private/server.key
</VirtualHost>
Есть ли способ заставить это работать?
Решение
Похоже, Apache предупреждает вас, что у вас есть несколько <VirtualHost>
разделы с одинаковым IP-адресом и портом...Что касается того, чтобы заставить его работать без предупреждений, я думаю, вам нужно будет использовать что-то вроде указания имени сервера (SNI), способа идентификации имени хоста, запрошенного как часть подтверждения SSL.По сути, он позволяет вам использовать виртуальный хостинг на основе имени через SSL, но я не уверен, насколько хорошо он поддерживается браузерами.За исключением чего-то вроде SNI, вы в основном ограничены одним доменным именем с поддержкой SSL для каждого IP-адреса, который вы предоставляете общедоступному Интернету.
Конечно, если у вас есть правильный доступ к веб-сайтам, вы, вероятно, сможете игнорировать предупреждения.Эти конкретные проблемы не очень серьезны — они в основном указывают на то, на что следует обратить внимание, если у вас возникли проблемы.
Другие советы
Насколько я знаю, Apache поддерживает SNI, так как версия 2.2.12 К сожалению, документация еще не отражает это изменение.
Перейти на http://wiki.apache.org/httpd/NameBasedSSLVHostsWithSNI пока это не закончится
Возможно, вам удастся заменить:
VirtualHost ipaddress:443
с
VirtualHost *:443
Вероятно, вам придется сделать это на всех ваших виртуальных хостах.
Вероятно, это прояснит это сообщение.Пусть директива ServerName позаботится о маршрутизации запроса сообщения.
Опять же, возможно, вы не сможете это сделать, если у вас есть несколько псевдонимов IP для одного и того же компьютера.
VirtualHost будет выглядеть так:
NameVirtualHost IP_Address:443
<VirtualHost IP_Address:443>
SSLEngine on
SSLCertificateFile /etc/pki/tls/certs/ca.crt # Where "ca" is the name of the Certificate
SSLCertificateKeyFile /etc/pki/tls/private/ca.key
ServerAdmin webmaster@domain_name.com
DocumentRoot /var/www/html
ServerName www.domain_name.com
ErrorLog logs/www.domain_name.com-error_log
CustomLog logs/www.domain_name.com-access_log common
</VirtualHost>
Apache не поддерживает SSL на виртуальном хосте на основе имени, а только на виртуальных хостах на основе IP.
Источник:Часто задаваемые вопросы по Apache 2.2 SSL Почему невозможно использовать виртуальный хостинг на основе имени для идентификации различных виртуальных хостов SSL?
В отличие от SSL, спецификация TLS допускает использование хостов на основе имен (SNI, как упоминалось кем-то другим), но Apache пока не поддерживает эту функцию.Предположительно, это будет в будущем выпуске при компиляции с openssl 0.9.8.
Также, mod_gnutls утверждает, что поддерживает SNI, но я никогда этого не пробовал.
Сначала вам нужен NameVirtualHost ip: 443 в файле конфигурации!Вероятно, у вас есть один с 80 на конце, но вам также понадобится один с 443.
Во-вторых, вам нужен сертификат *.domain (подстановочный знак) (его можно сделать).
В-третьих, вы можете сделать только что-то.доменные сети на одном ip (из-за сертификата)
Вы ДОЛЖНЫ добавить часть ниже, чтобы включить NameVirtualHost
функциональность с заданным IP.
NameVirtualHost IP_Address:443