Проблемы с настройкой сервера 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)

И в хром:

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

Apache error.log показывает это предупреждение:

[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 /

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

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

1 ответ

Решение

Вам не нужен 8443 HTTPS-разъем в Tomcat. Apache HTTPD должен разорвать соединение SSL и передать открытый текст в Tomcat через ProxyPass / http://localhost:8080/MYSITE/. Вам просто нужен текстовый HTTP-коннектор с port=8080, а также address=127.0.0.1 так что никакие посторонние не могут получить это.

Более того, у Tomcat нет никаких HTTP-коннекторов, просто AJP-коннектор, address=127.0.0.1 все еще, и используйте mod_proxy_ajp в Apache.

Другие вопросы по тегам