Налаштування SSL з apache перед tomcat


9

я намагаюся налаштувати Apache за допомогою SSl та проксі-SSL запитів на мій екземпляр tomcat. Я думаю, що я змусив SSL працювати, але все ж є помилка, яка з'являється:

Bad Gateway

The proxy server received an invalid response from an upstream server.

* SSL Virtualhost *

LoadModule ssl_module modules/mod_ssl.so

Listen 443
<VirtualHost _default_:443>
SSLEngine On
SSLProxyEngine On
DocumentRoot "/var/apache-tomcat-7.0.34/webapps/Learn2Gether/"

SSLCertificateFile /etc/pki/tls/learn2gether/cert-6090205098829887.pem
SSLCertificateKeyFile /etc/pki/tls/learn2gether/private_key_unlocked.pem
SSLCertificateChainFile /etc/pki/tls/learn2gether/rubca-chain.pem


BrowserMatch ".*MSIE.*" nokeepalive ssl-unclean-shutdown downgrade-1.0 force-response-1.0
SSLCipherSuite ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP:+eNULL

ServerName www.learn2gether.rubel.rub.de
ServerAlias learn2gether.rubel.rub.de

#RewriteRule ^\/$ /Learn2Gether/index.html [PT]
##RewriteRule ^/(.*)$ /$1 [PT]

ProxyRequests Off
ProxyPreserveHost On
ProxyPass / https://localhost:8443/
ProxyPassReverse / https://localhost:8443/

</VirtualHost>
~               

Перенаправлення HTTP VH на HTTPS

NameVirtualHost *:80

<VirtualHost _default_:80>
   ServerName www.learn2gether.rubel.rub.de
   ServerAlias learn2gether.rubel.ruhr-uni-bochum.de
RewriteEngine on
# DocumentRoot "/var/apache-tomcat-7.0.34/webapps/Learn2Gether/"
RewriteCond %{HTTP_HOST} !^learn2gether.rubel.ruhr-uni-bochum\.de [NC]
RewriteRule ^/(.*)$ http://learn2gether.rubel.ruhr-uni-bochum.de/$1 [R=301,L]

RewriteCond %{SERVER_PORT} !^443$
RewriteRule (.*) https://%{HTTP_HOST}$1 [L]

#RewriteRule ^\/$ /Learn2Gether/index.html [PT]
#RewriteRule ^/(.*)$ /$1 [PT]

#ProxyPass / https://localhost:8443/
#ProxyPassReverse / https://localhost:8443/
</VirtualHost>

З'єднувач Tomcats apache

    <Connector port="8443"
  protocol="HTTP/1.1"
   connectionTimeout="20000"
    compression="on"
     compressionMinSize="32"
      noCompressionUserAgents="gozilla, traviata"
       compressableMimeType="text/html,text/xml,text/javascript,application/x-javascript,text/css"
        redirectPort="8443"
         URIEncoding="UTF-8"
          proxyPort="443"
           proxyName="learn2gether.rubel.ruhr-uni-bochum.de"
            scheme="https"
             secure="true"
/>

Чи налаштований сервер tomcat за допомогою сертифіката, який самостійно підписує? Крім того, якщо ви використовуєте apache як ssl frontend для tomcat, чому ви також використовуєте ssl на сервері tomcat? Найкраща практика полягає у тому, щоб ваш tomcat відповідав на http та завантажував https на сервер apache.
Кріст ван Бесьєн

Відповіді:


14

Під час доступу до http або https до https вам потрібно налаштувати apache як ssl- клієнт . Коли апач спілкується з вашим сервером Tomcat, він все-таки функціонує як веб-клієнт. Однак Apache зазвичай не функціонує як клієнт SSL поза коробкою.

По-перше, я б запропонував вам спершу подумати, чи справді вам це потрібно, чому ви це робите. Поширена практика, коли Tomcat і Apache живуть на одному сервері - це Tomcat просто обслуговувати звичайний http (або ajp) і завантажувати ssl на сервер Apache. Зазвичай не потрібно мати ssl між сервером apache і tomcat. Відсутність ssl на сервері tomcat допоможе вам врятувати багато клопоту.

Все, що вам потрібно зробити, це, наприклад, визначити HTTP-роз'єм на порту 8080 у своєму екземплярі tomcat і перенаправити всі запити туди з вашого віртуального хоста apache SSL:

<VirtualHost _default_:443>
SSLEngine On

SSLCertificateFile /etc/pki/tls/learn2gether/cert-6090205098829887.pem
SSLCertificateKeyFile /etc/pki/tls/learn2gether/private_key_unlocked.pem
SSLCertificateChainFile /etc/pki/tls/learn2gether/rubca-chain.pem


BrowserMatch ".*MSIE.*" nokeepalive ssl-unclean-shutdown downgrade-1.0 force-response-1.0
SSLCipherSuite ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP:+eNULL

ServerName www.learn2gether.rubel.rub.de
ServerAlias learn2gether.rubel.rub.de

ProxyRequests Off
ProxyPreserveHost On
ProxyPass / http://localhost:8080/
ProxyPassReverse / http://localhost:8080/

</VirtualHost>

Але якщо ви все-таки вирішите, що вам потрібен ssl для проходження ssl, вам потрібно буде додати більше змін. Apache повинен мати можливість функціонувати як SSL-клієнт, так і SSL-сервер. Коли Apache спілкується з іншим сервером за допомогою https, він все-таки бере роль клієнта. Це не так просто, і є багато проблем, з якими можна стикатися. Вам потрібно буде додати це:

# turn on SSL proxying.
SSLProxyEngine On

# to tell Apache where to find CA certificates to check server certificates with:
# (You can choose yourself where you put these certificates)
SSLProxyCACertificatePath /path/to/ca/certificates.

Потім на цьому шляху потрібно поставити сертифікат CA, який використовується для підписання сертифікату, який використовується сервером, з яким ви спілкуєтесь. Якщо ви використовуєте "самопідписаний" сертифікат, вам потрібно буде помістити його в цей каталог.

Після того, як ви зробите це, вам потрібно запустити "c_rehash" у цьому каталозі. c_rehash є частиною стандартного розподілу openssl. c_rehash створює хеш-псевдоніми в цьому режимі. Апач потребує цих.

Для того щоб перевірити, чи все там є, ви можете зробити наступне:

 openssl s_client -CApath /path/to/ca/certificates -connect remoteserver:8443

якщо з'єднання вдалося, ви отримаєте підказку, де ви можете ввести запит. Просто спробуйте щось.

 GET /

і подивіться, якщо ви щось отримаєте. Якщо цей тест успішний, апаш також повинен працювати.

Тепер ви можете додати оператори ReWriteRule або Proxy, щоб переслати з'єднання на ваш https-сервер.


я насправді новий в цьому .. як я можу використовувати apache тільки для SSL та перенаправлення тільки з http?
SaifDeen

звучить для мене легше .. я просто хочу ssl для переднього кінця ...
SaifDeen

Якщо ви просто хочете використовувати apache як ssl frontend для Tomcat, все, що вам потрібно зробити, - це налаштувати http або ajp-роз'єм на своєму сервері tomcat і надіслати на нього apache пересилання запитів.
Кріст ван Бесьєн

я спробую це в понеділок!
SaifDeen
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.