Tomcatの前のApacheでのSSLセットアップ


9

SSlを使用してApacheを設定し、TomcatインスタンスにSSLリクエストをプロキシしようとしています。私は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 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サーバーは自己署名証明書で構成されていますか?また、TomcatのsslフロントエンドとしてApacheを使用している場合、なぜTomcatサーバーでもsslを使用しているのですか?ベストプラクティスは、tomcatをhttpに応答させ、httpsをApacheサーバーにオフロードすることです。
Krist van Besien 2013年

回答:


14

httpまたはhttpsをhttpsにプロキシする場合、Apacheをssl クライアントとして構成する必要があり ます。ApacheがTomcatサーバーと通信するとき、それは結局Webクライアントとして機能します。ただし、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は、このディレクトリにハッシュされたエイリアスを作成します。Apacheはこれらを必要とします。

すべてが存在するかどうかをテストするには、次の操作を実行できます。

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

接続が成功すると、要求を入力できるプロンプトが表示されます。ちょうど何かを試してみてください。

 GET /

あなたが何かを得るかどうかを確認してください。このテストが成功した場合、Apacheも動作するはずです。

ReWriteRuleまたはProxyステートメントを追加して、接続をhttpsサーバーに転送できるようになりました。


私は本当にそれに新しいです.. sslだけでapacheを使用して、httpだけでリダイレクトできますか?
SaifDeen 2013年

..私だけのフロントエンドのSSLをしたい...簡単に私のための音
SaifDeen

TomcatのsslフロントエンドとしてApacheを使用したいだけの場合は、Tomcatサーバーでhttpまたはajpコネクタを設定し、apacheにリクエストを転送するだけです。
Krist van Besien 2013年

病気で月曜日に試してみてください!
SaifDeen 2013年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.