Я запускаю приложение на 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
блок).