Thiết lập SSL với apache trước tomcat


9

Tôi đang cố gắng thiết lập Apache với các yêu cầu SSL SSl và proxy vào ví dụ tomcat của tôi. Tôi nghĩ rằng tôi đã làm cho SSL hoạt động nhưng vẫn có một lỗi xuất hiện:

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

Chuyển hướng HTTP VH sang 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>

Tomcats kết nối 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"
/>

Là máy chủ tomcat được cấu hình với một chứng chỉ tự ký? Ngoài ra, nếu bạn đang sử dụng apache làm ssl frontend cho tomcat thì tại sao bạn cũng sử dụng ssl trên máy chủ tomcat? Cách thực hành tốt nhất là chỉ cần tomcat của bạn phản hồi http và giảm tải https đến máy chủ apache.
Krist van Besien

Câu trả lời:


14

Khi ủy quyền http hoặc https sang https, bạn cần định cấu hình apache dưới dạng máy khách ssl . Khi apache nói chuyện với máy chủ Tomcat của bạn, nó sẽ hoạt động như một máy khách web. Tuy nhiên, Apache thường sẽ không hoạt động như một ứng dụng khách SSL.

Đầu tiên tôi sẽ đề nghị bạn xem xét trước tiên nếu bạn thực sự cần điều này, tại sao bạn lại làm việc này. Cách làm phổ biến khi Tomcat và Apache sống trên cùng một máy chủ là để Tomcat chỉ phục vụ http (hoặc ajp) đơn giản và giảm tải ssl cho máy chủ Apache. Thường không cần phải có ssl giữa máy chủ apache và tomcat. Không có ssl trên máy chủ tomcat sẽ giúp bạn tiết kiệm rất nhiều rắc rối.

Ví dụ, tất cả những gì bạn cần làm là xác định trình kết nối HTTP trên cổng 8080 trong ví dụ tomcat của bạn và chuyển hướng tất cả các yêu cầu ở đó từ bên trong máy chủ ảo SSL apache của bạn:

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

Nhưng nếu bạn vẫn quyết định bạn cần ssl để ủy quyền ssl, bạn sẽ cần thêm nhiều thay đổi. Apache cần có khả năng hoạt động như một máy khách SSL, cũng như máy chủ SSL. Khi Apache nói chuyện với một máy chủ khác bằng https, đó là sau tất cả vai trò của máy khách. Điều này không dễ dàng gì, và có rất nhiều vấn đề bạn có thể gặp phải. Bạn sẽ cần thêm điều này:

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

Sau đó, trong đường dẫn này, bạn cần đặt chứng chỉ CA được sử dụng để ký chứng nhận được sử dụng bởi máy chủ mà bạn liên lạc. Nếu bạn sử dụng chứng chỉ "tự ký", bạn sẽ cần đặt nó vào thư mục này.

Khi bạn đã hoàn thành, bạn cần chạy "c_rehash" trong thư mục đó. c_rehash là một phần của phân phối openssl tiêu chuẩn. c_rehash tạo các bí danh băm trong thư mục này. Apache cần những thứ này.

Để kiểm tra xem mọi thứ có ở đó không, bạn có thể làm như sau:

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

nếu kết nối thành công, bạn sẽ nhận được lời nhắc nơi bạn có thể nhập yêu cầu. Chỉ cần thử một cái gì đó.

 GET /

và xem nếu bạn nhận được một cái gì đó. Nếu thử nghiệm này là apache đầy đủ thì cũng nên làm việc.

Bây giờ bạn có thể thêm các câu lệnh ReWriteRule hoặc Proxy để chuyển tiếp các kết nối đến máy chủ https của bạn.


Tôi thực sự mới với điều đó .. làm thế nào tôi có thể sử dụng apache chỉ cho ssl và chuyển hướng chỉ với http?
SaifDeen

âm thanh cho tôi dễ dàng hơn .. tôi chỉ muốn ssl cho giao diện người dùng ...
SaifDeen

Nếu bạn chỉ muốn sử dụng apache làm ssl frontend cho Tomcat, tất cả những gì bạn phải làm là định cấu hình trình kết nối http hoặc ajp trên máy chủ tomcat của bạn và yêu cầu chuyển tiếp apache tới nó.
Krist van Besien

tôi sẽ thử nó vào thứ hai!
SaifDeen
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.