Configuração de SSL com apache na frente do tomcat


9

estou tentando configurar o Apache com solicitações SSl e proxy SSL para minha instância do tomcat. Acho que fiz o SSL funcionar, mas ainda existe um erro que aparece:

Bad Gateway

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

* Virtualhost SSL *

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

Redirecionamento de HTTP VH para 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>

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

O servidor tomcat está configurado com um certificado autoassinado? Além disso, se você estiver usando o apache como um front end ssl para o tomcat, por que também está usando o ssl no servidor tomcat? A melhor prática é fazer com que o seu tomcat responda a http e descarregue https para o servidor apache.
Krist van Besien

Respostas:


14

Ao fazer o proxy de http ou https para https, você precisa configurar o apache como um cliente ssl . Quando o apache fala com o servidor Tomcat, ele funciona como um cliente da Web, afinal. No entanto, o Apache geralmente não funciona como um cliente SSL pronto para uso.

Em primeiro lugar, sugiro que você considere primeiro se realmente precisa disso, por que está fazendo isso. A prática comum quando o Tomcat e o Apache vivem no mesmo servidor é o Tomcat servir apenas http (ou ajp) e descarregar o SSL para o servidor Apache. Geralmente, não é necessário ter SSL entre o servidor apache e o tomcat. Não ter ssl no servidor tomcat vai lhe poupar muitos problemas.

Tudo o que você precisa fazer é, por exemplo, definir um conector HTTP na porta 8080 na sua instância do tomcat e redirecionar todas as solicitações de lá no host virtual SSL do 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>

Mas se você ainda decidir que precisa de um proxy ssl para ssl, precisará adicionar mais alterações. O Apache precisa ser capaz de funcionar como um cliente SSL, bem como como um servidor SSL. Quando o Apache fala com outro servidor usando https, ele assume o papel de cliente. Isso não é fácil, e há muitos problemas nos quais você pode se deparar. Você precisará adicionar isto:

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

Nesse caminho, é necessário colocar o certificado da CA usado para assinar o certificado usado pelo servidor com o qual você se comunica. Se você usar um certificado "autoassinado", precisará colocá-lo neste diretório.

Depois de fazer isso, você precisa executar "c_rehash" nesse diretório. c_rehash faz parte de uma distribuição openssl padrão. c_rehash cria aliases de hash nesse diretório. O Apache precisa disso.

Para testar se tudo está lá, você pode fazer o seguinte:

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

se a conexão for bem-sucedida, você receberá um prompt para digitar uma solicitação. Apenas tente algo.

 GET /

e veja se você consegue alguma coisa. Se este teste for bem-sucedido, o apache também deve funcionar.

Agora você pode adicionar as instruções ReWriteRule ou Proxy para encaminhar as conexões ao seu servidor https.


sou realmente novo nisso .. como posso usar o apache apenas para ssl e redirecionar apenas com http?
SaifDeen

sons para mim mais fácil .. eu só quero SSL para o front-end ...
SaifDeen

Se você deseja apenas usar o apache como front end ssl para o Tomcat, tudo o que você precisa fazer é configurar um conector http ou ajp no servidor tomcat e ter solicitações de encaminhamento do apache.
Krist van Besien

mal tentar isso na segunda-feira!
SaifDeen
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.