2017-01-15 8 views
0

Вот контекст:Apache переписывают перед тем mod_jk (удалить WWW)

  • Я работаю с Centos 7 апача 2.4.6 и TOMCAT 8.0.
  • У меня есть классический веб-сайт php, который хранится в папке/var/www.
  • У меня есть сайт JEE, который хранится в папке webapps tomcat.
  • У меня есть подстановочный сертификат ssl (подписанный).

Вот что я хочу:

  • Я хочу, чтобы все доступы к серверу, чтобы быть перенаправлены на нужный сайт, с HTTPS и без WWW.

Вот примеры использования:

  • URL 'example.com' ==> перенаправлены на HTTPS OK
  • URL 'www.example.com' ==> перенаправлены HTTPS + удалить WWW OK
  • URL 'https://www.example.com' ==> держать HTTPS + удалить WWW OK

  • URL 'test.example.com' ==> перенаправлены на HTTPS OK

  • URL 'www.test.example.com' ==> перенаправленный https + удалить www OK
  • URL '' ==> KO не перенаправлен - браузер отображает страницу, в которой говорится, что сайт плохо настроен и соединение не защищено (потому что подстановочный знак ssl не охватывает 2 уровня)

Последнее, что я пытаюсь исправить.

Вот моя конфигурация:

<VirtualHost *:80> 
     ServerName example.com 
     ServerAlias www.example.com 
     Redirect/https://example.com/ 
    </VirtualHost> 
    <VirtualHost *:80> 
     ServerName test.example.com 
     ServerAlias www.test.example.com 
     Redirect/https://test.example.com/ 
    </VirtualHost> 
    <VirtualHost *:443> 
     ServerName example.com 
     ServerAlias www.example.com 
     DocumentRoot /var/www/public/example 
     SSLEngine on 
     SSLCertificateFile xxx 
     SSLCertificateKeyFile xxx 
     SSLCertificateChainFile xxx 
     RewriteEngine On 
     RewriteCond %{HTTPS} off [OR] 
     RewriteCond %{HTTP_HOST} ^www\. [NC] 
     RewriteCond %{HTTP_HOST} ^(?:www\.)?(.+)$ [NC] 
     RewriteRule^https://%1%{REQUEST_URI} [L,NE,R=301] 
    </VirtualHost> 
    <VirtualHost *:443> 
     ServerName test.example.com 
     ServerAlias www.test.example.com 
     SSLEngine on 
     SSLCertificateFile xxx 
     SSLCertificateKeyFile xxx 
     SSLCertificateChainFile xxx 
     RewriteEngine On 
     RewriteCond %{HTTPS} off [OR] 
     RewriteCond %{HTTP_HOST} ^www\. [NC] 
     RewriteCond %{HTTP_HOST} ^(?:www\.)?(.+)$ [NC] 
     RewriteRule^https://%1%{REQUEST_URI} [L,NE,R=301] 
     JkMount/worker_test 
     JkMount /* worker_test 
    </VirtualHost> 

Таким образом, кажется, что я почти там, но что я делаю не так?

ответ

0

Насколько я знаю, вы не можете настроить более одного виртуального хоста https для каждого IP-адреса, то есть виртуальный хостинг на основе имен ограничен только одним виртуальным хостом SSL.

Эта информация от https://wiki.apache.org/httpd/NameBasedSSLVHosts

Как правило, это невозможно разместить более одного виртуального хоста SSL на том же IP-адрес и порт. Это связано с тем, что Apache должен знать имя хоста, чтобы выбрать правильный сертификат для настройки уровня шифрования. Но имя запрашиваемого хоста содержится только в заголовках HTTP-запросов, которые являются частью зашифрованного содержимого. Поэтому он недоступен до тех пор, пока шифрование уже не будет согласовано. Это означает, что правильный сертификат не может быть выбран, и клиенты получат предупреждения о несоответствии сертификатов и будут уязвимы для атак типа «человек в середине».

В действительности, Apache позволит вам настроить виртуальные хосты на основе имени на основе имени, но он всегда будет использовать конфигурацию из виртуального хоста с первым номером (на выбранном IP-адресе и порту) для настройки уровня шифрования.В некоторых конкретных случаях допустимо использовать одну конфигурацию SSL для нескольких виртуальных хостов. В частности, это будет работать, если сертификат SSL применяется ко всем виртуальным хостам. Например, это будет работать, если:

  1. Все VirtualHosts находятся в том же домене, например: one.example.com и two.example.com.

  2. У вас есть подстановочный сертификат SSL для этого домена (тот, где общее имя начинается с Астерикса: т.е. * .example.com)

I've слышал об использовании SNI для достижения таких конфигураций, но я никогда не тестировал: SSL with Virtual Hosts Using SNI