바람둥이 앞에서 아파치로 SSL 설정 [R=301,L] RewriteCond %{SERVER_PORT} !^443$ RewriteRule (.*) https://%{HTTP_HOST}$1

내 Tomcat 인스턴스에 SSl 및 프록시 SSL 요청으로 Apache를 설정하려고합니다. SSL을 작동 시켰지만 여전히 오류가 나타납니다.

Bad Gateway

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

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

HTTPS로 HTTP VH 리디렉션

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 아파치 커넥터

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



답변

http 또는 https를 https로 프록시 할 때 Apache를 ssl 클라이언트 로 구성해야합니다
. 아파치가 Tomcat 서버와 대화 할 때 결국 웹 클라이언트로 작동합니다. 그러나 Apache는 일반적으로 즉시 SSL 클라이언트로 작동하지 않습니다.

먼저, 정말로 이것이 정말로 필요한지, 왜 당신이 이것을 하는지를 고려할 것을 제안합니다. Tomcat과 Apache가 동일한 서버에있을 때 일반적인 관행은 Tomcat이 일반 http (또는 ajp)를 제공하고 ssl을 Apache 서버로 오프로드하는 것입니다. 일반적으로 Apache와 Tomcat 서버간에 SSL이 필요하지 않습니다. Tomcat 서버에 SSL을 사용하지 않으면 많은 문제가 발생합니다.

예를 들어 Tomcat 인스턴스의 포트 8080에서 HTTP 커넥터를 정의하고 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 서버에 연결을 전달할 수 있습니다.


답변