Setup SSL dengan apache di depan kucing jantan

9

Saya mencoba men-setup Apache dengan SSl dan proksi permintaan SSL ke instance tomcat saya. Saya pikir saya membuat SSL berfungsi tetapi masih ada kesalahan yang muncul:

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

Konektor 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"
/>
SaifDeen
sumber
Apakah server tomcat dikonfigurasi dengan sertifikat yang ditandatangani sendiri? Juga, jika Anda menggunakan apache sebagai frontend ssl untuk tomcat, mengapa Anda juga menggunakan ssl di server tomcat? Praktik terbaik adalah membiarkan kucing jantan merespons http, dan melepas https ke server apache.
Krist van Besien

Jawaban:

14

Saat proksi http atau https ke https Anda harus mengonfigurasi apache sebagai klien ssl . Bagaimanapun, ketika apache berbicara dengan server Tomcat Anda, ia berfungsi sebagai klien web. Namun Apache biasanya tidak akan berfungsi sebagai klien SSL di luar kotak.

Pertama-tama saya menyarankan agar Anda mempertimbangkan terlebih dahulu jika Anda benar-benar membutuhkan ini, mengapa Anda melakukan ini. Praktik umum ketika Tomcat dan Apache tinggal di server yang sama adalah memiliki Tomcat hanya melayani http polos (atau ajp) dan membongkar ssl ke server Apache. Biasanya tidak perlu memiliki ssl antara apache dan server tomcat. Tidak memiliki ssl di server kucing jantan akan menyelamatkan Anda dari banyak masalah.

Yang perlu Anda lakukan hanyalah menentukan konektor HTTP pada port 8080 dalam instance kucing jantan Anda, dan mengalihkan semua permintaan dari dalam host virtual SSL apache Anda:

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

Tetapi jika Anda masih memutuskan Anda memang perlu ssl ke ssl proxy, Anda perlu menambahkan lebih banyak perubahan. Apache harus dapat berfungsi sebagai klien SSL, serta server SSL. Ketika Apache berbicara ke server lain menggunakan https itu adalah setelah semua mengambil peran klien. Ini tidak semudah itu, dan ada banyak masalah yang bisa Anda hadapi. Anda perlu menambahkan ini:

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

Kemudian di jalur ini Anda harus meletakkan sertifikat CA yang digunakan untuk menandatangani sertifikat yang digunakan oleh server yang Anda ajak berkomunikasi. Jika Anda menggunakan sertifikat "ditandatangani sendiri", Anda harus memasukkannya ke dalam dir ini.

Setelah Anda selesai melakukannya, Anda perlu menjalankan "c_rehash" di direktori itu. c_rehash adalah bagian dari distribusi openssl standar. c_rehash membuat alias hash dalam dir ini. Apache membutuhkan ini.

Untuk menguji apakah semuanya ada, Anda dapat melakukan hal berikut:

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

jika koneksi berhasil, Anda akan mendapatkan prompt tempat Anda dapat mengetik permintaan. Coba saja sesuatu.

 GET /

dan lihat apakah Anda mendapatkan sesuatu. Jika tes ini berhasil, apache harus bekerja juga.

Anda sekarang dapat menambahkan pernyataan ReWriteRule atau Proxy untuk meneruskan koneksi ke server https Anda.

Krist van Besien
sumber
im benar-benar baru untuk itu .. bagaimana saya bisa menggunakan apache hanya untuk ssl dan redirect hanya dengan http?
SaifDeen
kedengarannya lebih mudah bagi saya .. saya hanya ingin ssl untuk front end ...
SaifDeen
Jika Anda hanya ingin menggunakan apache sebagai frontend ssl untuk Tomcat, Anda hanya perlu mengkonfigurasi konektor http atau ajp di server tomcat Anda, dan minta apache untuk meneruskannya.
Krist van Besien
sakit coba itu pada hari Senin!
SaifDeen