Konfiguracja SSL z apache przed tomcat


9

Próbuję skonfigurować Apache z żądaniami SSl i proxy SSL do mojej instancji tomcat. Myślę, że sprawiłem, że SSL działa, ale nadal pojawia się błąd:

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>
~               

Przekierowanie HTTP VH na 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>

Złącze Apache Tomcats

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

Czy serwer tomcat jest skonfigurowany z certyfikatem z podpisem własnym? Ponadto, jeśli używasz apache jako frontendu ssl dla tomcat, dlaczego używasz ssl również na serwerze tomcat? Najlepszą praktyką jest po prostu, aby twój tomcat odpowiadał na http i przesyłał https do serwera apache.
— Krist van Besien

Odpowiedzi:


14

Podczas proxy http lub https do https musisz skonfigurować apache jako klienta ssl . Gdy apache komunikuje się z serwerem Tomcat, w końcu działa on jako klient WWW. Jednak Apache zwykle nie będzie działać jako klient SSL po wyjęciu z pudełka.

Po pierwsze, sugeruję, abyś najpierw rozważył, czy naprawdę tego potrzebujesz, dlaczego to robisz. Powszechną praktyką, gdy Tomcat i Apache mieszkają na tym samym serwerze, jest to, że Tomcat po prostu obsługuje zwykły http (lub ajp) i odciąża ssl na serwer Apache. Zwykle nie ma potrzeby posiadania ssl między serwerem Apache i Tomcat. Brak ssl na serwerze tomcat zaoszczędzi ci wielu problemów.

Wszystko, co musisz zrobić, to na przykład zdefiniować łącznik HTTP na porcie 8080 w instancji tomcat i przekierować tam wszystkie żądania z poziomu wirtualnego hosta SSL Apache:

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

Ale jeśli nadal decydujesz, że potrzebujesz proxy ssl do ssl, musisz dodać więcej zmian. Apache musi działać jako klient SSL, a także jako serwer SSL. Gdy Apache rozmawia z innym serwerem za pomocą protokołu https, w końcu przyjmuje rolę klienta. To nie jest takie proste i możesz napotkać wiele problemów. Musisz dodać to:

# 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.

Następnie na tej ścieżce musisz umieścić certyfikat CA używany do podpisania certyfikatu używanego przez serwer, z którym się komunikujesz. Jeśli używasz certyfikatu z podpisem własnym, musisz go umieścić w tym katalogu.

Gdy to zrobisz, musisz uruchomić „c_rehash” w tym katalogu. c_rehash jest częścią standardowej dystrybucji openssl. c_rehash tworzy skróty w tym katalogu. Apache potrzebuje tego.

Aby sprawdzić, czy wszystko tam jest, możesz wykonać następujące czynności:

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

jeśli połączenie się powiedzie, pojawi się monit, w którym możesz wpisać zapytanie. Po prostu spróbuj czegoś.

 GET /

i zobacz, czy coś otrzymasz. Jeśli ten test się powiedzie, apache powinien również działać.

Możesz teraz dodać ReWriteRule lub instrukcje proxy, aby przekazywać połączenia do serwera https.


jestem naprawdę nowy w tym .. jak mogę używać apache tylko dla ssl i przekierować tylko za pomocą http?
— SaifDeen

brzmi dla mnie łatwiej .. Chcę tylko SSL dla interfejsu ...
— SaifDeen

Jeśli chcesz po prostu używać apache jako frontendu ssl dla Tomcat, wystarczy skonfigurować łącznik http lub ajp na serwerze tomcat i mieć do niego żądania przesyłania apache.
— Krist van Besien

źle wypróbuję to w poniedziałek!
— SaifDeen
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.