Имя виртуального хоста Apache с SSL
Я пытаюсь настроить наши серверы, чтобы разрешить трафик через SSL. Я знаю, что SSL не работает с Name Virtual Host, но у нас есть все наши серверы apache на виртуальных машинах с выделенными частными IP-адресами. У нас есть основная виртуальная машина с настройкой mod_proxy для маршрутизации трафика в соответствующие vms.
Однако для маршрутизации трафика https нам необходимо установить сертификат как на прокси, так и на vms. У нас есть подстановочный сертификат, который можно использовать для всех наших хостов. Кажется, что все работает нормально, но я получаю следующее в журналах apache для прокси:
[warn] Init: SSL-сервер: конфликт IP/порта: host1.domain.com:443 (/etc/apache2/sites-enabled/host1:1) vs. host2.domain.com:443 (/etc/apache2/сайты с поддержкой /host 2: 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>
Есть ли способ заставить это работать?
Ответы
Ответ 1
Похоже, Apache предупреждает вас, что у вас есть несколько разделов <VirtualHost>
с тем же IP-адресом и портом... насколько он работает без предупреждений, я думаю, вам нужно будет использовать что-то вроде имени имени сервера (SNI), способ идентификации имени хоста, запрошенного как часть подтверждения SSL. В основном это позволяет вам создавать виртуальный хостинг на основе имен через SSL, но я не уверен, насколько он поддерживается браузерами. Помимо чего-то вроде SNI, вы в основном ограничены одним доменным именем с поддержкой SSL для каждого IP-адреса, который вы публикуете в общедоступном Интернете.
Конечно, если вы сможете правильно обращаться к веб-сайтам, вы, вероятно, будете игнорировать предупреждения. Эти особенности не очень серьезны - они в основном свидетельствуют о том, на что смотреть, если вы испытываете проблемы.
Ответ 2
Насколько я знаю, Apache поддерживает SNI начиная с версии 2.2.12
К сожалению, документация еще не отражает это изменение.
Перейдите к http://wiki.apache.org/httpd/NameBasedSSLVHostsWithSNI, пока это не закончится
Ответ 3
Возможно, вы сможете заменить:
VirtualHost ipaddress:443
с
VirtualHost *:443
Вам, вероятно, нужно сделать это на всех ваших виртуальных хостах.
Вероятно, это сообщение будет очищено. Пусть директива ServerName беспокоится о маршрутизации запроса сообщения.
Опять же, вы не сможете это сделать, если у вас несколько псевдонимов ip на одном компьютере.
Ответ 4
Apache не поддерживает SSL на виртуальном хосте на основе имен, только на виртуальных хостах на основе IP.
Источник: Apache 2.2 Вопрос по частоте SSL Почему нельзя использовать виртуальный хостинг на основе имени для идентификации разных виртуальных хостов SSL?
В отличие от SSL, спецификация TLS позволяет использовать хосты на основе имен (SNI, упомянутые кем-то другим), но Apache еще не поддерживает эту функцию. Он предположительно будет в будущем выпуске, если скомпилирован против openssl 0.9.8.
Кроме того, mod_gnutls утверждает, что поддерживает SNI, но я никогда не пробовал его.
Ответ 5
Сначала вам нужно NameVirtualHost ip: 443 в вашем файле конфигурации!
Вероятно, у вас есть один с 80 в конце, но вам также понадобится номер 443.
Во-вторых, вам нужен сертификат *.domain(подстановочный знак) (можно сделать его)
В-третьих, вы можете создавать только кое-что. Домены в одном ip (из-за сертификата)
Ответ 6
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 [email protected]_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>