Назад | Перейти на главную страницу

Проблемы с настройкой сервера apache для прокси-соединения SSL

Я запускаю приложение на Tomcat7 с Apache Portable Runtime, я купил сертификат SSL и правильно его настроил - когда я пытаюсь подключиться через комбинацию ip: port, он подключается нормально, но предупреждает меня, что сертификат выдается на доменное имя, не IP.

VPS, на котором я работаю, не имеет SELinux (и есть проблема с установкой), что AFAIK требуется для настройки SSL в apache, поэтому я хочу просто перенаправить запросы на Tomcat, который делает это со своей стороны.

Я настроил apache для проксирования соединений, сначала с портом 80, который отлично работает:

NameVirtualHost www.mysite.com:80
<VirtualHost www.mysite.com:80>
ProxyPreserveHost On
ProxyRequests Off
ServerName http://www.mysite.com
ServerAlias http://www.mysite.com
ProxyPass / http://localhost:8180/MYSITE/
ProxyPassReverse / http://localhost:8180/MYSITE/
ProxyPassReverseCookiePath /MYSITE/ /
</VirtualHost>

А затем с портом SSL, который по какой-то причине не хочет работать:

NameVirtualHost www.mysite.com:443
<VirtualHost www.mysite.com:443>
        SSLProxyEngine On
        ProxyPreserveHost On
        ProxyRequests Off
        ServerName https://www.mysite.com
        ServerAlias https://www.mysite.com
        ProxyPass / https://localhost:8443/MYSITE/
        ProxyPassReverse / https://localhost:8443/MYSITE/
        ProxyPassReverseCookiePath /MYSITE/ /
        CacheDisable *
</VirtualHost>

РЕДАКТИРОВАТЬ: Я добавил

RequestHeader set Front-End-Https "On"

директива VirtualHost www.mysite.com:443, согласно: http://www.gossamer-threads.com/lists/apache/users/396577

Вот коннектор Tomcat APR, настроенный в Tomcat server.xml -

<Connector port="8443" maxHttpHeaderSize="16500"
                 maxThreads="150"
                 enableLookups="false" disableUploadTimeout="true"
                 acceptCount="100" scheme="https" secure="true"
                 SSLEnabled="true"
                 SSLCertificateFile="x509-cert-path"
                 SSLCertificateKeyFile="key-file-path"
 />

Не было ошибок / предупреждений при включении виртуальных хостов и перезапуске apache. Когда я пытаюсь перейти на https, я вижу в FFox вот что:

SSL received a record that exceeded the maximum permissible length.

(Error code: ssl_error_rx_record_too_long)

А в Chromium:

Error 107 (net::ERR_SSL_PROTOCOL_ERROR): SSL protocol error.

В журнале ошибок Apache отображается это предупреждающее сообщение:

[warn] [client 216.58.38.90] proxy: no HTTP 0.9 request (with no host line) on incoming request and preserve host set forcing hostname to be www.mysite.com for uri /

Я потратил дни, пытаясь настроить его, и был бы очень благодарен, если бы кто-нибудь объяснил, что происходит и как это исправить.

Большое спасибо. Виктор.

Ошибка, которую вы получаете, вероятно, связана с тем, что ваш клиент (Firefox) пытается использовать SSL, но на вашем виртуальном хосте Apache SSL не включен.

Чтобы ваши клиенты могли обмениваться данными через SSL с вашим прокси-сервером переднего плана, вам понадобится использовать SSL во внешнем интерфейсе, а не в Tomcat. Вы ничего не получите, используя SSL между Apache и Tomcat.

В твоем <VirtualHost> block, вам понадобится как минимум:

SSLEngine On
SSLCertificateFile ...
SSLCertificateKeyFile ...

Также обратите внимание, что htat SELinux не имеет абсолютно ничего общего с SSL, кроме того факта, что неправильно настроенная среда SELinux может помешать Apache читать необходимые сертификаты SSL.

Если вы не используете Apache как нечто иное, кроме простого прокси, и вам действительно не нравится конфигурация Apache, теоретически вы можете избавиться от него и просто заставить Tomcat прослушивать порт 443 (изменив соответствующий Connector блок).